【问题标题】:How to create vendor bundles with latest Browserify (6.x.x)?如何使用最新的 Browserify (6.x.x) 创建供应商捆绑包?
【发布时间】:2014-12-03 04:52:45
【问题描述】:

好吧,我们使用 Browserify 2.x 已经有一段时间了。我们正在进行一些重构,因此我们想尝试更新到最新的 Browserify,以减少未来版本的飞跃。

不幸的是,处理外部包的方式发生了一些变化。在旧版本中,我们可以简单地告诉 Browserify 哪些模块要保留在捆绑包中,并从另一个模块中要求它们 - 基本上是 described here

从版本 5.0.0 开始,Browserify 内部发生了一些重大变化。让我们以这个命令为例。 debug 模块是 NPM 模块。

browserify -r debug -o vendor.js

在 Browserify@4 中运行此命令,输出文件如下所示:

require=(function... {
    "debug":[function(require,module,exports){
        module.exports=require('2Bvkwp');
    },{}],
    "2Bvkwp":[function(require,module,exports){
        // actual code from debug module
    },{}]
});

现在有了 Browserify@5,它看起来像这样:

require=(function... {
    1:[function(require,module,exports){
        // actual code from debug module
    },{}]
});

为了完成等式,我有一个包含require('debug') 的简单文件,它与命令browserify -x debug -e index.js -o main.js 捆绑在一起。 debug 模块的内部依赖项设置为 undefined,这没问题。

如果您查看prelude.js 文件,就会发现其中的逻辑只是使用先前定义的全局require(存储在previousRequire 变量中)来查找当前包中未定义的模块。但是因为vendor.js 没有暴露任何类似debug 模块的东西,所以它不能成功。

我只能在更新日志中找到这一行:

散列消失了,所以要公开:进行多导出捆绑需要真实或显式公开 ID

我无法找到这实际上意味着什么:(

【问题讨论】:

    标签: javascript browserify


    【解决方案1】:

    您应该能够像这样创建您的供应商捆绑包:

    browserify -r debug > vendor.js
    

    然后像这样创建您的应用程序包:

    browserify index.js -x debug > main.js
    

    这很好用(我正在使用browserify@6.1.0)。

    基本上,即使require('debug'); 在浏览器控制台中不起作用,只要包以正确的顺序加载,browserify 也可以在供应商包中找到debug 模块,即:

    <script src="vendor.js"></script>
    <script src="main.js"></script>
    

    它不必将依赖项暴露给外部代码,只需要暴露给其他 browserify 包。

    【讨论】:

    • 是的,看起来他们终于修好了,谢谢提醒。
    猜你喜欢
    • 2014-04-15
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2023-03-23
    相关资源
    最近更新 更多