Browserify从全局范围的require中加载依赖项,而不是期望它们捆绑在一起

Oli*_*ier 6 javascript commonjs browserify

我正在开发库A和库B,B取决于A.我想使用browserify将它们独立捆绑,所以在我的浏览器中我可以这样做:

var A = require("A");
var B = require("B");
Run Code Online (Sandbox Code Playgroud)

我想独立地捆绑它们,因为我也在开发只依赖于A的库C,如果A包含在B中那么C将无法访问它,如果A在B和C中,我就是得到了重复.

所以我开始浏览库A:

browserify -r ./src/A.js:A -o build/A.js
Run Code Online (Sandbox Code Playgroud)

哪个工作得很好,我可以分发A和其他人可以用它开发他们的应用程序.

然后我浏览库B:

browserify -r ./src/B.js:B -o build/B.js
Run Code Online (Sandbox Code Playgroud)

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

browserify -r ./src/B.js -o build/B.js -i A
Run Code Online (Sandbox Code Playgroud)

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

我用-x尝试了外部化的东西但是我不能再从全局范围中要求我的库了.

我设法通过黑客攻击生成的B输出来获得我想要的行为,迫使模块分辨率从之前的需求中获得A,这让我觉得可以有一个简单的解决方案,但我找不到它.

我正在使用browserify 2.18.1

Zas*_*asz 1

有两种看待它的方式:

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

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

  • 一般来说,如果您有 2 个具有公共部分的浏览器化捆绑包,它们在同一页面中导入,那么您已经陷入了捆绑包组织/依赖关系、哪些组件放入哪些内容等问题。被审查/改变