【发布时间】:2017-02-22 19:58:33
【问题描述】:
我一直在查看一些 NodeJS 示例,并且遇到了以下情况:
var module = require('..');
var module = require('../');
我明白 require 是做什么的,但是我不明白这样写的时候它会做什么。谁能给我解释一下?
【问题讨论】:
-
你能给我提供 github 的例子吗?
我一直在查看一些 NodeJS 示例,并且遇到了以下情况:
var module = require('..');
var module = require('../');
我明白 require 是做什么的,但是我不明白这样写的时候它会做什么。谁能给我解释一下?
【问题讨论】:
这是https://nodejs.org/api/modules.html中定义的规则
路径 Y 处的模块需要(X)
- 如果 X 以“./”或“/”或“../”开头
一个。 LOAD_AS_FILE(Y + X)
湾。 LOAD_AS_DIRECTORY(Y + X)
由于../或..不是文件,所以会去路径B,作为目录加载
LOAD_AS_DIRECTORY(X)
- 如果 X/package.json 是一个文件,
一个。解析 X/package.json,然后查找“main”字段。
湾。让 M = X + (json 主字段)
C。 LOAD_AS_FILE(M)- 如果 X/index.js 是文件,则将 X/index.js 作为 JavaScript 文本加载。停止
- 如果 X/index.json 是文件,则将 X/index.json 解析为 JavaScript 对象。停止
- 如果 X/index.node 是一个文件,则将 X/index.node 作为二进制插件加载。停止
根据该规则,它会按此顺序检查以下文件
1)../package.json
2)../index.js
3)../index.json
4) ../index.node
【讨论】:
如果您需要一个目录,require 将尝试根据这些规则从该目录中包含一个模块:
如果 X/package.json 是一个文件,
一个。解析 X/package.json,然后查找“main”字段。
湾。让 M = X + (json 主字段)
C。 LOAD_AS_FILE(M)
2. 如果 X/index.js 是文件,则将 X/index.js 加载为 JavaScript 文本。停止
3. 如果 X/index.json 是文件,则将 X/index.json 解析为 JavaScript 对象。停止
4. 如果 X/index.node 是一个文件,加载 X/index.node 作为二进制插件。停止
您的目录结构很可能如下所示:
module/
index.js
src/
file-including.js
这将加载index.js。你也可以把它写成require('../index.js') 甚至require('../index'),它的功能也是一样的。
【讨论】:
使用var module = require('..'); 和var module = require('../'); 结果相同。
两者都从父目录加载。
【讨论】: