alias 和 varName = require("module") 之间的 browserify-shim 区别

browserify-shim difference between alias and varName = require("module")

我正在使用 browersify-shim 将 jquery、bootstrap 和我的自定义 js 文件捆绑到一个最终包中。

我的自定义 js 文件对 jQuery 没有任何依赖性,尽管 bootstrap 有。

我有以下package.json

"browser" : {
    "jquery": "path/to/jquery",
    "bootstrap": "path/to/bootstrap"
},
"browserify": {
    "transform": [ "browserify-shim" ]
},
"browserify-shim": {
    "jquery": "$",
    "bootstrap": {"depends" : "jquery:jQuery"}
},

现在在我的脚本文件中,我必须执行以下操作:

require('jquery');
require('bootstrap');

package.json 中为 "jquery" 添加别名与 var window.$ = require('jquery');

之间有区别吗

在某些地方,我看到人们同时进行上述两种操作,难道只有一种就足够了吗?

其次,为什么我需要显式 require jQuerybootstrap,即使我的自定义 js 文件的 none 依赖于它。有没有办法告诉 browserify-shimpackage.json 中的所有内容捆绑在一起,我无论如何都会告诉那里的所有依赖项和别名。为什么重复要求我的脚本文件中的每个模块。

第一个问题:

Is there a difference between adding an alias to "jquery" in package.json, vs doing var window.$ = require('jquery');

人们这样做的原因是他们需要 jQuery 出现在 他们的 bundle.js 之外。例如,您可能直接在 index.html 中有一个 $(document).ready() 处理程序,在这种情况下,您需要在 window 对象上使用 jQuery。如果您在 bundle.js 之外没有任何 jQuery 代码,那么这不是必需的,您可以根据需要在 bundle.js.

中使用 var $ = require('jquery');

你的第二个问题让我认为可能是上述情况。答案是您绝对可以在 bundle.js 之外加载 Bootstrap 和 jQuery。

这里一个好的解决方案是以通常的方式通过 <script></script> 标记将它们简单地添加到您的包之外。然后,如果您在捆绑包中需要它们,您可以 require them as a global 这样,如果您在 bundle.js 中引用它们,它们就不会被加载两次。