我希望能够访问模块的所有导出,而不必在导出前说module.
。
假设我有一个模块:
// mymod.js
module.exports.foo = function() {
console.log("foo!");
}
module.exports.bar = "bar!";
还有一个主文件:
// main.js
var mymod = require("./mymod.js");
mymod.foo();
有没有一种方法可以致电foo()
而无需先说mymod.
?这可以在Python中通过说import module as *
来实现。
NodeJS等效于什么?
答案 0 :(得分:0)
您可以使用ES6解构:
var { foo } = require("./mymod.js");
foo();
答案 1 :(得分:0)
在ES6中,您可以通过以下方式导入模块
import moduleName from "path/to/module"; // import default export from the file as moduleName object, moduleName can be anything
import { exportMemberName1, exportMemberName2, ... } from "path/to/module"; // destructured import, it will destructure import and can access the export module without prefixing anything
import * as moduleName from "path/to/module"; // import everything exported from the file as moduleName object, you can access every export members from that object, moduleName can be anything
这是ES6提供的唯一导入模块的方法(您也可以使用require
)。
如果您必须导入100个模块,最好的方法是第一种方法,将所有内容作为对象导入并在旅途中进行分解,这意味着如果您有很多函数或方法,请在该函数旁边分解该函数中想要的内容,例如。
import * as moduleName from "path/to/file";
function function1(){
const { exportMember1, exportMember2 } = module;
}
function function2(){
const { exportMember1, exportMember5, exportMember7 } = module;
}
答案 2 :(得分:0)
我希望能够访问模块的所有导出而不必 说模块。出口之前。
使用速记:
exports.myVar = myVar
exports.foo = () => {}
或使用对象:
module.exports = {
foo,
myVar
}
// main.js
var mymod = require("./mymod.js");
mymod.foo();
是否有一种无需说mymod即可调用foo()的方法。之前? 这可以在python中通过将import module表示为*来实现。什么是 相当于NodeJS吗?
使用解构:
const { foo } = require("./mymod.js")
让我说一个文件中有100个出口。我需要加逗号吗 在{}内每次导入之后?必须有更好的方法 这个
如果您有100个导出,为什么要将它们全部作为自己的功能全局导入? myMod.func
更为清晰。
一个棘手的解决方法可能是先做const myMod = require('myMod')
然后映射它,然后将函数放在全局对象上。或者从一开始就将它们放在全局中,而不是将其导出。
答案 3 :(得分:0)
我遇到的情况是,我在几个模块(使用了所有功能)中使用了一个很小但不是那么小的通用实用程序,其中已经加载了相当数量的模块。显然,以已知的通用工具模块的一部分的方式来命名此函数,因此“ module.function”是多余的,不会提高代码的可读性。因此,我更喜欢模仿Python的“从模块导入*”。请注意,这是我第一次遇到这种情况,因此,在几乎所有情况下,IMO都根本不是一个好习惯。唯一的方法是迭代模块的导出,并将功能添加到全局对象。我提供了一个功能以使意图明确。
const importAll = () => {
return {
mod: null,
from(modName) {
this.mod = require(modName);
Object.keys(this.mod)
.forEach(exportedElementId => global[exportedElementId] = this.mod[exportedElementId]);
}
}
}
它的用法如下:
importAll().from('module-name');
请注意,这仅在模块导出对象时有效。如果模块导出例如数组,将无法正常工作。