如何通过一个包引用所有应用程序依赖项?

时间:2017-11-05 14:29:51

标签: javascript node.js npm

我正在尝试将解决方案复制到Cory House在此nice talk中描述的Node.js中的包管理。

他的团队维护着一个名为Fusion的软件包,它引用了项目组合中使用的所有依赖项,因此每个项目只是导入这个唯一的软件包,它也应该导入所有依赖项。

我创建了一个类似的Fusion包,将所有依赖项放在那里,然后将Fusion添加到我的应用的package.json中的依赖项部分,但我似乎无法{{ Fusion来自应用程序的依赖关系,因为它们在逻辑上安装在Fusion的require()中。

如何使这项工作?如何在我的应用程序中使用Fusion软件包的依赖项?

1 个答案:

答案 0 :(得分:0)

我认为实现这一目标的方法是明确地将所有软件包从Fusion重新导出到外部世界。 假设Fusion的package.json包含以下内容:

"dependencies": {
    "jquery": "^3.2.1",
    "bootstrap": "^3.3.7",
    "express": "^4.16.2",
    "ejs": "^2.5.7",
    "body-parser": "^1.18.2",
    "sprintf-js": "^1.1.1"
  },

变体1 : 使Fusion导出所有依赖项:

// Fusion/index.js
module.exports.jquery = require("jquery");
module.exports.express = require("express");
module.exports.ejs = require("ejs");
module.exports.bodyParser = require("body-parser");
module.exports.sprintf = require("sprintf-js");

然后应用程序可以引用所有这些:

// App/app.js
var fusion = require("fusion");
var express = fusion.express;
var bodyParser = fusion.bodyParser;

变式2 :从Fusion导出require功能:

// Fusion/index.js
module.exports.require = _require
function _require(name) { return require(name) }

将在应用程序中使用哪个来导入所有依赖项:

// App/app.js
var fusion = require("fusion");
var express = fusion.require("express");
var bodyParser = fusion.require("body-parser");

如果以任何一种方式完成,一切正常。 当然欢迎更优雅的解决方案。