前端分享程序员首页投稿(暂停使用,暂停投稿)

Node 模块与require

2017-09-27  本文已影响25人  石宝宝

module.exports与exports的关系:

模块代码真正被执行时是被包装过的。

(function(exports, require, module,  __filename, __dirname){

    console.log(“hello, word”)      //原始文件内容

})

module和exports都是模块执行时的参数,其中exports也是module的一个属性,默认情况下是一个空对象。当require一个模块的时候,实际上得到的是该模块的exports属性。

给一个模块添加属性时,使用exports.key = value即可。javascript在传递参数的时候,如果是对象,传递的是引用。export = {key:value};因为覆盖了原来的引用,所以是行不通的。

require(id)分为三种情况:

(1)引入内建模块(http,fs,path)。

(2)引入文件模块(以.或..开始的相对路径文件模块)。

(3)引入一个包(当id不是内建模块也不是一个文件模块时,则认为是一个包。这个包可能是通过npm安装的。包的加载方式是,在当前目录下寻找node _modules目录中是否存在该包,没有再向上一级目录查找,没有再向上一级目录查找,直到根目录下的node_modules目录。找到资源后,会找到包的描述文件:package.json,该文件的main字段表明了包的入口文件。如果main指定的文件错误,或者压根没有package.json文件,会依次查找index.js、index.json、index.node,如果都没有找到,则会抛出查找失败的异常。)

在任意模块输出module.paths,会看到路径的生成规则

console.log(module.paths)

当require()在分析标识符的过成功,如果扩展名不存在,会依次按照.js、.json、.node来进行查找文件。所以如果是json或者node文件,在require时可以加上文件名后缀,可以加快一点速度。

上一篇下一篇

猜你喜欢

热点阅读