需要目录中的模块

requiring modules from directory

我对 commonjs 在节点环境中的工作方式有点困惑。我正在使用第 3 方库,他们的示例显示了如何访问特定模块,如下所示:

const {module1, module2} = require('somedir/someotherdir')

我知道它会在目录中寻找index.js,但是它怎么知道要加载哪些模块呢?在 index.js 文件中,我看到:

module.exports = {
    someError,
    someOtherError,
    yetAnotherError,

    module1,
    module2,
    module3
}

上面的require代码怎么知道拉取module1和module2,而忽略module3, someError, someOtherError, yetAnotherError

这是一个名为 解构 的编程技术示例,随 ECMAScript 2015 a.k.a 引入。 ES6.

它基本上是一种快捷方式,可让您将对象的属性直接放入变量中。

在不解构的情况下,一种冗长的代码编写方式是:

const someobject = require('somedir/someotherdir')
const module1 = someobject.module1
const module2 = someobject.module2

所以 require 语句只给你一个普通的旧 JavaScript 对象,然后你得到 module1module2属性.

这个语法只是一个简短的版本:

const {module1, module2} = require('somedir/someotherdir')

你也可以这样写,例如:

const someobject = require('somedir/someotherdir')
const {module1, module2} = someobject

当您编写解构语句时,您可以通过将名称放在花括号中来决定将对象的哪些属性保存在局部变量中。

例如,如果你想获得 someErrorsomeOtherError,你可以这样写:

const {someError, someOtherError} = require('somedir/someotherdir')

...并获得一切:

const {someError, someOtherError, yetAnotherError, module1, module2} = require('somedir/someotherdir')

另请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment