使用浏览器化和分离公共库时找不到 jquery



我在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' );

最新更新