我正在创建一个共享的JavaScript函数包。目前,我正在尝试像这样使用它们:
/app/index.js
const myPackage = require('../myPackage');
myPackage.function1();
myPackage.myScope.function2();
以上内容已成功加载myPackage
。但是,当我尝试运行function1
时,收到一条错误消息:“ TypeError:myPackage.function1不是函数”。我在“包”中的代码是这样组织的:
/myPackage
index.js
root
function1.js
myScope
function2.js
代码如下:
index.js
require('./root/function1.js');
require('./myScope/function2.js');
function1.js
exports.function1 = function() {
console.log("Doing stuff in function1");
}
function2.js
exports.function2 = function() {
console.log("Doing stuff for function2");
}
我可以理解function2
无法正常工作,因为myScope
中没有任何内容,我不知道该怎么做。但是,我不明白为什么function1
没有运行。我在做什么错了?
答案 0 :(得分:1)
您的index.js
不导出任何内容。您将不得不做
Object.assign(exports, require('./root/function1.js'));
exports.myScope = require('./myScope/function2.js');
或者最好让您的function1.js
和function2.js
模块导出函数本身(module.exports = function() { … };
)而不是创建属性,然后使用
exports.function1 = require('./root/function1.js');
exports.myScope = {
function2: require('./myScope/function2.js'),
};
答案 1 :(得分:1)
要详细说明bergi的答案,您需要在index.js
文件中添加以下内容:
// file: index.js
exports.function1 = require('./root/function1.js').function1;
exports.myScope2 = {
function2: require('./myScope/function2.js').function2,
};
因为require('./root/function1.js') == exports object in function1.js
。所以如果你
function1.js
中有多个功能,您必须像这样:
// file: index.js
exports.function1 = require('./root/function1.js').function1;
exports.function11 = require('./root/function1.js').function11;
exports.function111 = require('./root/function1.js').function111;
...
其中的快捷方式可以是:
// file: index.js
Object.assign(exports, require('./root/function1.js'));
另一方面:,您可以将导出对象设置为函数:
// file: function1.js
module.exports = function() {
console.log("Doing stuff in function1");
}
然后,您可以在index.js
文件中添加以下内容:
// file: index.js
exports.function1 = require('./root/function1.js');
exports.myScope2 = {
function2: require('./myScope/function2.js'),
};
这里require('./root/function1.js') == function1 from function1.js
。希望能解释
问题。