在 Browserify 中引用 CDN 库而不将其捆绑到最终的 JS 文件中。

37

如果我有一个从CDN下载的库,并且不想它成为最终JS文件的一部分,而是希望能够使用browserify来require它,我该如何解决?

以下是我目前使用alias和一个shim文件来解决这个问题的方法。

browserify: {
    options: {
        debug: true,
        transform: [ 'reactify' ],
        alias: [
            'client/shims/jquery.js:jquery'
        ]
    },
    app: {
        src:  'client/app.js',
        dest: 'public/app.js'
    }
}

这里是一个shim文件 client/shims/jquery.js,我将其别名为jquery,以便可以使用require('jquery')而不是完整路径。

module.exports = $;

在grunt-browserify中是否有一种支持这种情况的快捷方式?我想知道是否可以在Gruntfile.js中定义它而不创建shim文件。

添加external: [ 'jquery' ]似乎完全忽略它,不起作用。


看起来我有一个类似的问题:https://dev59.com/JnrZa4cB1Zd3GeqP8ecM - 我目前是在 browserify 之外处理这个问题,只是通过配置显式地将 jQuery 传递给库。https://github.com/miohtama/bitcoinaddress.js/blob/master/demo.js#L77 然而我的解决方案并不理想。 - Mikko Ohtamaa
想问同样的问题。这个有什么消息吗? - Sergejs Rižovs
2个回答

27

使用browserify-shim,可以在您的package.json文件中添加以下内容:

使用 browserify-shim 可以将此代码添加至您的 package.json 文件中:

  "browserify": {
    "transform": [
      "browserify-shim"
    ]
  },

  "browserify-shim": {
    "jquery": "global:$"
  }

然后你就可以在你的模块中通过 require('jquery') 来使用jQuery了。


16
第三方模块需要使用jQuery怎么办?似乎browserify-shim不能将这些requires替换为globals,有什么解决方法吗? - neurosnap

0
如果您在页面上加载Browserify捆绑包之前加载jQuery,则$将作为全局变量可用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接