【问题标题】:NodeJS require('..')?NodeJS 需要('..')?
【发布时间】:2017-02-22 19:58:33
【问题描述】:

我一直在查看一些 NodeJS 示例,并且遇到了以下情况:

var module = require('..');
var module = require('../');

我明白 require 是做什么的,但是我不明白这样写的时候它会做什么。谁能给我解释一下?

【问题讨论】:

  • 你能给我提供 github 的例子吗?

标签: node.js require


【解决方案1】:

这是https://nodejs.org/api/modules.html中定义的规则

路径 Y 处的模块需要(X)

  1. 如果 X 以“./”或“/”或“../”开头
    一个。 LOAD_AS_FILE(Y + X)
    湾。 LOAD_AS_DIRECTORY(Y + X)

由于../..不是文件,所以会去路径B,作为目录加载

LOAD_AS_DIRECTORY(X)

  1. 如果 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 作为二进制插件加载。停止

根据该规则,它会按此顺序检查以下文件

1)../package.json

2)../index.js

3)../index.json

4) ../index.node

【讨论】:

  • 嗨。我在想。当我这样做时会发生什么。请查看此 repo (github.com/MJB-Khorasani/require) 并回答我。谢谢。在 admin.js 文件和 user.js 文件中它不知道 express。但我将它导入imports.js 文件中。那么这有什么问题呢?
【解决方案2】:

如果您需要一个目录,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'),它的功能也是一样的。

【讨论】:

    【解决方案3】:

    使用var module = require('..');var module = require('../'); 结果相同。

    两者都从父目录加载。

    【讨论】:

    • 嗨。我在想。当我这样做时会发生什么。请查看此 repo (github.com/MJB-Khorasani/require) 并回答我。谢谢。在 admin.js 文件和 user.js 文件中它不知道 express。但我将它导入imports.js 文件中。那么这有什么问题呢?
    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2017-07-13
    • 2016-06-18
    相关资源
    最近更新 更多