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



我正在尝试复制 Node 中的包管理解决方案.js Cory House 在这个精彩的演讲中描述。

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

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

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

我认为实现这一点的方法是将所有包从 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");

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

最新更新