我在Express应用程序中继承了一个大型Gulpfile,该应用程序有两个步骤:
构建公共库-将jQuery和下划线等公共库组合并缩小为"common.min.js"
build-浏览"js/modules/*.js"glob中的js文件,不包括"构建公共库"步骤中的任何模块,例如"contact.js"
此时,在浏览验证之前,contact.js
包含的所有内容都是:
var $ = require('jquery');
我在结束body标记之前包含common.min.js
,然后是contact.min.js
。我遇到的问题是:
Uncaught Error: Cannot find module 'jquery'
如果我自己浏览contact.js:
browserify -e contact.js -o contact.min.js
问题得到了解决,但完全违背了分离公共libs的目的。
如何在contact.js
中正确引用jQuery?
Gulpfile相当大,所以我在这里省略了它。我在运行任务时没有收到任何错误,但如果您需要查看任何部分,请告诉我。
我认为您面临的问题是,browserfy会将捆绑包上的每个文件包装到其自己的IIFE(立即调用的函数表达式)中,因此,此var $ = require('jquery');
将仅在其自己的上下文(构建公共库IIFE内产生的IIFE)上有效。
为了解决这个问题,将jQuery显式添加到窗口对象中,这样其他IIFE就可以访问它
试试这样的东西(也取决于你想使用的别名):
window.$ = window.jQuery = require( 'jquery' );