node自定义模块的路径查找

自定义模块指的是非核心模块,也不是路径形式的标识符。它是一种特殊的文件模块,可能是一个文件或者包的形式。这类模块的查找是最费时的,也是所有方式中最慢的一种。

模块路径是Node在定位文件模块的具体文件时制定的查找策略,具体表现为一个路径组成的数组。关于这个路径的生成规则,我们可以手动尝试一番。

创建test.js文件,其内容为 console.log(module.paths); 。
将其放到任意一个目录中然后执行 node test.js 。

在Linux下,你可能得到的是这样一个数组输出:

[ ‘/home/jackson/research/node_modules‘,
‘/home/jackson/node_modules‘,
‘/home/node_modules‘,
‘/node_modules‘ ]
1
2
3
4
而在Windows下,也许是这样:

[ ‘c:\\nodejs\\node_modules‘, ‘c:\\node_modules‘ ]
1
可以看出,模块路径的生成规则如下所示。

前文件目录下的node_modules目录。
父目录下的node_modules目录。
父目录的父目录下的node_modules目录。
沿路径向上逐级递归,直到根目录下的node_modules目录。
它的生成方式与JavaScript的原型链或作用域链的查找方式十分类似。在加载的过程中,Node会逐个尝试模块路径中的路径,直到找到目标文件为止。可以看出,当前文件的路径越深,模块查找耗时会越多,这是自定义模块的加载速度是最慢的原因。

webpack可以配置模块的查找路径

resolve: {
modules: [path.resolve(__dirname, ‘node_modules‘)]
}
1
2
3
指定只在当前模块的node_modules查找模块
---------------------

原文地址:https://www.cnblogs.com/hyhy904/p/11192625.html

时间: 2024-11-12 11:00:43

node自定义模块的路径查找的相关文章

Node自定义模块

每一个nodejs文件就是一个模块,每一个模块就是一个nodejs文件,一般这个模块会返回一个对象,这个对象包含了这个模块的所有操作方法和属性 现在自己封装一个自定义的模块,使用箭头函数 let http = require('http') let start = () => { let server = http.createServer((req, res) => { res.writeHead(200, {'content-type': 'text/html;charset=UTF-8'

python :自定义模块添加路径

自己写一个pyhton模块每次在使用的时候加载自己的模块都说模块不存在,然后自己在网上找了一个总共有三中方法,都试了. 1:import sys sys.path.append("加入自己的模块路径"),  //这种方法我要吐槽很麻烦,每次都要重新加一次,受够了. 2:添加环境变量 //这个也不推荐,毕竟每次自己的模块都不是在同一个目录下. 3:找到python安装路径里的site-packages,如‘E:\pythonfile\Lib\site-packages’,然后在里面新建一

深入浅出node(2) 模块机制

一)CommonJs 1.1CommonJs模块定义 二)Node的模块实现 2.1模块分类 2.2 路径分析和文件定位 2.2.1 路径分析 2.2.2 文件定位 2.3 模块编译 一) CommonJs  在CommonJs的官网上写着这样一句话 javascript:not just for browsers any more  CommonJs是一种规范,它涵盖了模块.二进制.Buffer.文件系统.包管理等,node就是借鉴了CommonJs的Modules规范实现了一套非常易用的模块

windows 下Python import 导入自定义模块

周末在家研究这个东西,则找到解决方案. 费话少说,上代码 1 #定义一个自定义的函数,如下 2 #函数的名称必须是字母和数字的组合,不能用数字开头 3 #函数名后用小括号括住入参,可以用逗号分隔多个 4 #如果有返回值用return ,如果没有返回值,默认返回None 5 6 def PanDuanFenShu(score): 7 if 100 >= score >= 90: 8 print("A") 9 if 90 > score >= 80: 10 prin

Python的模块引用和查找路径

模块间相互独立相互引用是任何一种编程语言的基础能力.对于"模块"这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中的一个.cs文件,Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块):对于解释型的语言会更加直观些,比如PHP的.php文件,在Python中就是.py文件可以认为是一个模块.在"模块"之上有"包",主要是

如何发布一个自定义Node.js模块到NPM(详细步骤)

咱们闲话不多说,直接开始! 由于我从没有使用过MAC,所以我不保证本文中介绍的操作与MAC一致. 文章开始我先假定各位已经在window全局安装了Node.js,下面开始进行详细步骤介绍: 本文本着,以极少的文字说明以及极少的代码书写为原则来给大家演示! 文章中上传的模块不具备任何意义! 一.封装node.js模块时的必须项 1.创建package.json 每一个完整封装的node模块,必须含有一个参数明确的package.json文件! 以下为package.json的最精简配置: { "n

常用模块【一】模块引用与查找路径

模块的概念 在计算机的程序开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放在不同的文件里,这样每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式, 在python中一个.py文件就称之为一个模块(module) 使用模块有什么好处??? 最大的好处就是大大提高了代码的可维护性: 其次代码编写不必从零开始,当一个模块编写完毕,就可以被其他地方引用,我们在编写程序的时候,也经常引用其他模块,包括pyt

Node.js 模块机制及常见面试问题解答

Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript 开发大型应用没有标准的缺陷,类似于 Java 中的类文件,Python 中的 import 机制,Node.js 中可以通过 module.exports.require 来导出和引入一个模块. 在模块加载机制中,Node.js 采用了延迟加载的策略,只有在用到的情况下,系统模块才会被加载,加载完成后会放到 binding_cache 中. 面试指南 require的加载机制?,参考:模块加载机制 modu

Node.js入门:文件查找机制

文件查找流程图 从文件模块缓存中加载 尽管原生模块与文件模块的优先级不同,但是都不会优先于从文件模块的缓存中加载已经存在的模块. 从原生模块加载 原生模块的优先级仅次于文件模块缓存的优先级.require方法在解析文件名之后,优先检查模块是否在原生模块列表中.以http模块为例,尽管在目录下存在一个http/http.js/http.node/http.json文件,require("http")都不会从这些文件中加载,而是从原生模块中加载. 原生模块也有一个缓存区,同样也是优先从缓存