6

我正在根据 A 开发库 A 和库 B、B。我想使用 browserify 将它们独立捆绑起来,所以在我的浏览器中我可以这样做:

var A = require("A");
var B = require("B");

我想将它们独立捆绑起来,因为我还在开发仅依赖于 A 的库 C,如果 A 包含在 B 中,那么 C 将无法访问它,如果 A 在 B 和 C 中,我已经有重复。

所以我从浏览库 A 开始:

browserify -r ./src/A.js:A -o build/A.js

效果很好,我可以分发 A,其他人可以用它开发他们的应用程序。

然后我browserify库B:

browserify -r ./src/B.js:B -o build/B.js

但是我现在有两次 A,A 在浏览器中独立加载,并再次与 B 打包。所以我使用 browserify 中的 -i 选项来防止它被包含:

browserify -r ./src/B.js -o build/B.js -i A

但是,当 B 需要 A 时,它会得到一个空对象 {} 而不是库。尽管库 A 仍然可以通过 require("A") 从全局范围内使用。

我尝试使用 -x 进行外部化,但是我不再需要全局范围内的库。

我设法通过破解 B 的生成输出来获得我想要的行为,强制模块解析从以前的要求中获取 A,这让我认为可以有一个简单的解决方案,但我找不到它。

我正在使用 browserify 2.18.1

4

1 回答 1

1

两种看待它的方式:

  • 将 B 视为 jquery-ui,将 A 视为 jquery。如果他们希望使用 jquery-ui,则由用户将 jquery 包含到 DOM 中。因此,在构建 B 时根本不需要 A。

  • 记录 B 内置了 A 的事实。使用 B 的用户根本不应该包括 A。在这种情况下 - 您显然需要要求 A 并将 B 与 A 捆绑在一起。

  • 一般来说,如果您有 2 个带有公共部分的浏览器化捆绑包,它们被导入到同一个页面中,那么您已经陷入捆绑包组织/依赖关系的问题,什么组件放在什么等等。基础知识需要被审查/改变

于 2014-10-03T16:55:56.250 回答