nodejs模块加载机制

nodejs通过require加载模块,require里面分为相对路径和非相对路径,不同的表示方法,node的寻找机制是不同的。本文翻译自

相对路径

相对路径时,node是直接查找的,如:在/root/src/moduleA.js下,我们要依赖模块var var x = require("./moduleB");nodejs通过以下步骤找到模块。

  1. 作为文件找/root/src/moduleB.js如果存在
  2. 作为目录找/root/src/moduleB,如果目录包含package.json并且标明了main。如在/root/src/moduleB/package.json中包含{ "main": "lib/mainModule.js" },则其找寻/root/src/moduleB/lib/mainModule.js
  3. 做为目录如果在/root/src/moduleB下有index.js则加载/root/src/moduleB/index.js。

具体详情可以查看nodejs文件加载机制
注意:当以‘/’开头加载的时候是文件的绝对路径。如require('/home/marco/foo.js')
将加载 /home/marco/foo.js

非相对路径

对于非相对的模块导入,node将会在node_modules中找,如在/root/src/moduleA.js中我们依赖模块var x = require("moduleB");node将会通过下面步骤找寻moduleB:

  1. /root/src/node_modules/moduleB.js

  2. /root/src/node_modules/moduleB/package.json
    (if it specifies a "main"
    property)

  3. /root/src/node_modules/moduleB/index.js

  4. /root/node_modules/moduleB.js

  5. /root/node_modules/moduleB/package.json
    (if it specifies a "main"
    property)

  6. /root/node_modules/moduleB/index.js

  7. /node_modules/moduleB.js

  8. /node_modules/moduleB/package.json
    (if it specifies a "main"
    property)

  9. /node_modules/moduleB/index.js

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 模块 Node 有简单的模块加载系统。在 Node 里,文件和模块是一一对应的。下面例子里,foo.js加载同一个...
    保川阅读 610评论 0 0
  • publicPath指定了一个在浏览器中被引用的URL地址。 对于使用 和 加载器,当文件路径不同于他们的本地磁盘...
    飞呀飞哥阅读 1,725评论 0 0
  • jHipster - 微服务搭建 CC_简书[https://www.jianshu.com/u/be0d56c4...
    quanjj阅读 843评论 0 2
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,329评论 4 31
  • 天空真小,小得只装得下两个字。
    我硕阅读 159评论 0 0