×

nodejs 路径解析顺序

96
Moorez
2018.06.04 19:45* 字数 438

前言

平时在使用 nodejs 去 require 的时候是不是有使用绝对路径或者相对路径去引用,那么 nodejs 解析路径顺序是怎么样的呢?接下来我会讲一下 nodejs 路径解析顺序

相对路径解析顺序

假设有一个文件路径为 /root/src/moduleA.js,包含了一个导入var x = require("./moduleB");, 也就是导入了一个相对路径的一个模块,那么Node.js以下面的顺序解析这个导入:

  • /root/src/moduleB.js这个路径是否存在,如果不存在进入下一步。
  • 检查/root/src/moduleB 目录是否包含一个package.json文件,且package.json文件指定了一个"main"模块,比如 ,Node.js发现文件 /root/src/moduleB/package.json 包含了 { "main": "lib/mainModule.js" },那么 nodejs 就会去 /root/src/moduleB/lib/mainModule.js
  • 如果没有 main 字段,nodejs会检查/root/src/moduleB目录是否包含一个 index.js 文件。 这个文件会被隐式地当作那个文件夹下的"main"模块。

绝对路径解析顺序

假设有一个文件路径为/root/src/moduleA.js,里面包含了一个导入var x = require("moduleB");,也就是绝对路径的一个模块,那么Node.js以下面的顺序解析这个导入:

  • /root/src/node_modules/moduleB.js
  • /root/src/node_modules/moduleB/package.json(里面指定了 main 字段,跟上面相对路径是一样的)
  • /root/src/node_modules/moduleB/index.js
    如果上面三个没有找到,往上一级目录找:
  • /root/node_modules/moduleB.js
  • /root/node_modules/moduleB/package.json
  • /root/node_modules/moduleB/index.js
    如果还没有找到,继续往上一级找:
  • /node_modules/moduleB.js
  • /node_modules/moduleB/package.json
  • /node_modules/moduleB/index.js
前端
Web note ad 1