对于commonjs在节点环境中的工作方式,我有些困惑。我正在使用第3方库,它们的示例说明了如何访问这样的特定模块:
const {module1, module2} = require('somedir/someotherdir')
我知道它将在目录中查找index.js,但是它如何知道要加载哪些模块?在index.js文件中,我看到:
module.exports = {
someError,
someOtherError,
yetAnotherError,
module1,
module2,
module3
}
上面的需求代码如何知道拉出模块1和模块2,并忽略模块3,someError,someOtherError和yetAnotherError
答案 0 :(得分:1)
这是ECMAScript 2015(又称为ES6)引入的称为 destructuring 的编程技术的示例。
基本上,这是一种快捷方式,可让您将对象的属性直接放入变量中。
一种无需破坏即可编写代码的冗长方式是:
const someobject = require('somedir/someotherdir')
const module1 = someobject.module1
const module2 = someobject.module2
因此, require 语句只是为您提供了一个普通的旧JavaScript对象,您随后将获得该对象的 module1 和 module2 属性。
此语法只是这样做的简短版本:
const {module1, module2} = require('somedir/someotherdir')
您也可以写,例如:
const someobject = require('somedir/someotherdir')
const {module1, module2} = someobject
编写解构语句时,可以通过将名称放在花括号中来决定要保存在局部变量中的对象的哪些属性。
例如,如果您想获取 someError 和 someOtherError ,则可以这样编写:
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