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

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

本文关键字:require module 区别 varName 之间 browserify-shim alias      更新时间:2023-09-26

我正在使用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文件都不依赖于它。有没有办法告诉browserify-shim将所有内容捆绑在package.json中,无论如何我都会告诉那里的所有依赖项和别名。为什么重复工作需要我的脚本文件中的每个模块。

第一个问题:

在package.json中添加别名到"jquery"与执行var window.$=require('jquery'(之间有什么区别;

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

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

这里一个好的解决方案是通过<script></script>标签以通常的方式将它们添加到捆绑包之外。然后,如果您在捆绑包中需要它们,您可以将它们作为全局要求,这样如果您在bundle.js中引用它们,它们就不会加载两次。