使用Browserify与jQuery插件

10

一些简要的背景:我正在使用browserify和browserify-shim(以及gulp进行构建)创建网络应用程序。在遇到这个问题之前,我从npm中require了jquery,所以没有任何问题。但是当我开始进行一些优化时,我意识到包含jQuery的捆绑文件有多么庞大。因此,现在我正在使用脚本标记从CDN获取jQuery,并将其放置在bundle.js文件之前。但我遇到了一个问题,无法正确地声明jQuery为全局变量并将我的jQuery插件shimming于browserify和browserify-shim中。每当我运行gulp进行构建时,我都会收到相同的错误:

[gulp] gulp-notify: [Compile Error] module "jquery" not found from "/Volumes/Chetan/Users/cshenoy/Projects/urbanstems-node/app/plugins/jquery.inview.js"

看起来browserify-shim没有发现jQuery是全局的。

供参考,我正在使用inview插件

这是我的package.json文件及其中相关部分:

"browser": {
  "inview": "./app/plugins/jquery.inview.js"
},
"browserify-shim": {
  "jquery": "global:jQuery",
  "inview": {
    "depends": [
      "jquery"
    ]
  }
}

请告诉我还有什么其他信息可以帮助诊断错误。


4
我对相反的方向很好奇。当你从npm中 require('jquery') 时,你是如何将它全局暴露以便插件仍然能够正常工作的? - Michael Martin-Smucker
当我从npm安装它时,我没有将其全局公开。browserify-shim中jquery的值将为$或jQuery。然后,所有依赖于jQuery的插件都将在其下面列出,并且depends字段将列出jquery。 - Chetan Shenoy
1个回答

6
原来,如果一个jQuery插件只依赖于jQuery,那么你不需要在“browserify-shim”下声明每个jQuery插件。我只是删除了“inview”条目,一切都正常工作了。

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