打包JavaScript函数

时间:2019-03-31 10:56:53

标签: javascript

我正在创建一个共享的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没有运行。我在做什么错了?

2 个答案:

答案 0 :(得分:1)

您的index.js不导出任何内容。您将不得不做

Object.assign(exports, require('./root/function1.js'));
exports.myScope = require('./myScope/function2.js');

或者最好让您的function1.jsfunction2.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。希望能解释 问题。