【问题标题】:Can't find jquery when using Browserify and separating common libs使用Browserify并分离常用库时找不到jquery
【发布时间】:2015-11-27 02:21:53
【问题描述】:

我在一个 Express 应用程序中继承了一个大型 Gulpfile,它有两个我正在使用的步骤:

build-common-lib - 将 jQuery 和下划线等常用库合并并缩小为“common.min.js”

build - 浏览“js/modules/*.js”glob 中的 js 文件,不包括“build-common-lib”步骤中的任何模块,例如“contact.js”

此时所有contact.js在browserification之前包含的是:

var $ = require('jquery');

我在结束正文标记之前包含common.min.js,然后是contact.min.js。我遇到的问题是:

Uncaught Error: Cannot find module 'jquery'

如果我自己浏览器化contact.js:

browserify -e contact.js -o contact.min.js

问题解决了,但完全违背了分离公共库的目的。

如何在contact.js 中正确引用 jQuery?

Gulpfile 非常大,所以我在这里省略了它。运行任务时我没有收到任何错误,但如果您需要查看任何部分,请告诉我。

【问题讨论】:

    标签: jquery gulp browserify


    【解决方案1】:

    我认为您面临的问题是 browserify 会将捆绑包中的每个文件包装到其自己的 IIFE(立即调用的函数表达式)中,因此,此 var $ = require('jquery'); 将仅在其自己的上下文中有效(IIFE导致内部 build-common-lib IIFE)。

    要解决此问题,请将 jQuery 显式添加到窗口对象,以便其他 IIFE 可以访问它。

    尝试这样的事情(也取决于您要使用的别名):

    window.$ = window.jQuery = require( 'jquery' );
    

    【讨论】:

    • 您必须在公共文件上执行此操作,而不是在联系人上。在联系中,您将有 window.$ 已经可用(确保您首先在客户端加载 common)。
    • 好的,我明白现在发生了什么。我根本不需要在contact.js 中要求jquery。我真的需要停止熬夜了:)
    • 很高兴为您提供帮助!那是我们不时跌倒的东西:)
    • 感谢您的帮助,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多