使用browserify-shim伪造全局jQuery? (找不到模块' jquery')

时间:2015-07-16 12:31:53

标签: jquery browserify jquery-cookie browserify-shim

我遇到了关于jQuery插件的Browserify令人费解的问题。由于我有多个独立子应用程序包,因此我的HTML中有一些全局库作为<script>标记,以防止重复。

我正在使用gulpbrowserify-shimbabelify来创建我的捆绑包。

package.json内:

"dependencies": {
  "jquery.cookie": "^1.4.1",
  ...
},
"browserify-shim": {
  "jquery": "global:jQuery",
   ...
},
"browserify": {
  "transform": [
    "browserify-shim"
  ]
}

base.html内:(在制作中,这些将是CDN链接)

<!--[if lt IE 9]><script src="/bower_components/jquery-legacy/jquery.min.js"></script><![endif]-->
<!--[if gte IE 9]><!-->
<script src="/bower_components/jquery/dist/jquery.min.js"></script>
<!--<![endif]-->

在我的一个源文件中:

import $ from 'jquery'; // this works
import 'jquery.cookie'; // this crashes browserify

错误讯息:

Error: Cannot find module 'jquery' from '/path/to/node_modules/jquery.cookie'

jQuery是与npm一起安装,因为我不希望它进入我的捆绑包。

我猜这里的问题是require('jquery')内有一个未解决的电话jquery.cookie.js

我如何假冒&#39;使用browserify-shim对插件存在全局jQuery实例?

注意:This solution不符合我的需求,因为jQuery将被分成许多捆绑包。

1 个答案:

答案 0 :(得分:6)

解决。 This solution似乎完美无缺。

作为参考,这是我的Gulpfile中的(固定)watchify调用:

var b = browserify({
    entries: [app.input_dir + app.entry],
    debug: true,
    cache: {},
    packageCache: {},
    fullPaths: true
})
    .transform(babelify)
    .transform({
        global: true
    }, 'browserify-shim')
    .plugin('minifyify', {
        map: app.output_dir + app.entry + '.map',
        output: app.output_dir + app.entry + '.map'
    });

var watcher = watchify(b);