需要目录而不是js文件

requiring a directory rather than a js file

我在 index.js 文件中遇到这样一段代码:

exports = module.exports = require("./src")

不确定 exports = module.exports 位的含义。 并且不确定导入整个目录意味着什么 /src.

TL;DR

这些是您问题的解决方案,从第一到第二(按顺序)。

  1. 最有可能将变量 exports 设置为 module.exports
  2. 导入文件夹中的默认文件(例如 index.js)是否指定。

1. exports 变量定义了什么?

来自Dave Meehan,做了一些更正:

评论 #1

Your explanation of 1 is incorrect. If they were separate statements as illustrated, exports would equal the previous value of module.exports, and module.exports would equal the return value of require. Chaining them together sets both exports and module.exports to the value returned by require. It's not clear why someone would want to do that, but they did.

评论#2

We should be very careful in interpreting what the result might be in such a statement as its dependent on whether the variables export and module (with/without property exports) already exists, and whether we are using strict mode. There's a number of other SO posts that expand on "chaining assignment".

注意:我对这一行也有点困惑,所以这是我有根据的猜测。欢迎在评论中纠正我,或编辑我的 post.

注意:此解法不正确。请参阅 Dave Meehan 对此解决方案更正的评论。

这一行很可能也可以分成多行,就像这样。

exports = module.exports;
module.exports = require("./src");

基本上,它只是创建一个名为 exports 的变量,并将其设置为 module.exports

同样的事情也可以使用对象析构来完成。

const { exports } = module;

这将简单地从 module 获取 exports 键,并创建一个名为 exports 的新变量。


2。你如何require一个文件夹?

从技术上讲,Node 不会导入整个文件夹。基本上,它正在检查目录中的默认文件。

Node.js检查文件有两种情况。

  1. 如果 main 属性 在 package.json 中定义,它将在 /src 目录中查找该文件。

    {
      "main": "app.js"
    }
    

    如果 package.json 是这样的,例如,它会搜索 /src/app.js.

  2. 如果 main 属性 未在 package.json 中定义,则默认情况下它将查找名为 index.js 的文件。因此,它将导入 /src/index.js.


总结

综上所述,这些是您问题的解决方案。

  1. 最有可能将变量 exports 设置为 module.exports
  2. 导入文件夹中的默认文件(例如 index.js)是否指定。

这应该有助于消除您的困惑。