使用jQuery> = 2的Browserify产生“ jQuery需要带有文档的窗口”

布莱恩·克雷

我正在使用browserify通过CommonJS样式的依赖项来捆绑我的前端javascript。例如,我有:

$ = require('jquery/dist/jquery');  // v2.1.0-beta2                                                                                                                                                                       
_ = require('underscore');                                                                                                                                                                                 
Backbone = require('backbone');

但是,当browserify捆绑依赖项时,我遇到以下控制台错误:

Error: jQuery requires a window with a document

查看jQuery代码,我发现它正在尝试this用于global window

(function( window, factory ) {
....
}(this, function( window ) {

由于browserify包装了所有依赖关系,因此thisobject,而不是window

有趣的是jQuery> = 2应该与CommonJS兼容。但是,问题是browserify如何包装依赖项。有谁解决了这个问题?

马特

TL; DR;

就您而言,它应该像使用一样简单;

$ = require('jquery/dist/jquery')(window);  // v2.1.0-beta2  

可能很明显;但您必须在使用的每个模块中使用这种形式的声明(传递window给的结果require),而不仅仅是一个/第一个,等等。


非tl;博士;

对于任何想知道为什么的人,处理这个的jQuery中有趣的代码是:

(function( window, factory ) {

    if ( typeof module === "object" && typeof module.exports === "object" ) {
        // Expose a jQuery-making factory as module.exports in loaders that implement the Node
        // module pattern (including browserify).
        // This accentuates the need for a real window in the environment
        // e.g. var jQuery = require("jquery")(window);
        module.exports = function( w ) {
            w = w || window;
            if ( !w.document ) {
                throw new Error("jQuery requires a window with a document");
            }
            return factory( w );
        };
    } else {
        factory( window );
    }

// Pass this, window may not be defined yet
}(this, function( window ) {

    // All of jQuery gets defined here, and attached to the (locally named variable) "window".

}));

请注意顶部的注释,这些注释显式地解决了browserify;在jQuery位于CommonJs-land的情况下jQuery,它返回一个函数,该函数在传递对象(应为window)时返回jQuery ,而不是返回我们所知的函数


混淆问题的进一步,这个安装程序代码已经在最新的再次改变提交,使module.exports确定像这样;

module.exports = global.document ?
    factory( global ) :
    function( w ) {
        if ( !w.document ) {
            throw new Error( "jQuery requires a window with a document" );
        }

        return factory( w );

......这样的,如果this window对象时,jQuery是require()“d,它会返回一个jQuery的情况下,如果没有它会返回出厂功能之前; 因此,当实际释放2.1.0版本时,您将不得不(window)再次删除该呼叫。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

需要带有Node和jQuery的JS

来自分类Dev

未捕获的错误:Bootstrap的JavaScript需要带有requirejs的jQuery

来自分类Dev

Bootstrap 下拉菜单需要带有 Angular 2 项目的 Popper.js

来自分类Dev

由于某些原因,使用std :: make_pair需要带有boost :: flat_map的显式类型

来自分类Dev

仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

来自分类Dev

仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

来自分类Dev

Webpack 添加 jQuery 插件:错误:jQuery 需要一个带有文档的窗口

来自分类Dev

使用browserify填充jQuery插件

来自分类Dev

我需要带有ReaderWriterLockSlim的MemoryBarrier吗?

来自分类Dev

在React JS中需要带有变量的文件

来自分类Dev

需要带有计数器的按键按钮

来自分类Dev

需要带有计数器的按键按钮

来自分类Dev

如何在Browserify中使用jQuery?

来自分类Dev

结合使用Browserify和jQuery插件

来自分类Dev

browserify全局和在模块中使用JQuery

来自分类Dev

如何在Browserify中使用jQuery?

来自分类Dev

使用通过Browserify导入的jQuery插件

来自分类Dev

在带有Browserify的ES6中使用Bootstrap和jQuery包时出错

来自分类Dev

使用jQuery对横幅动画产生多种效果

来自分类Dev

使用带有 2 个按钮的 jQuery 旋转图像

来自分类Dev

带有 Browserify / Shim CDN jQuery 的光滑轮播

来自分类Dev

Browserify产生了无法使用的bundle.js

来自分类Dev

需要带有TextTrimming和MaxLines的WPF TextBlock或TextBox

来自分类Dev

我需要带有C11的GCC的-pedantic标志吗?

来自分类Dev

需要带有纯抽象类类型参数的子句吗?

来自分类常见问题

我需要带有异步Web框架的celery吗?

来自分类Dev

调用需要带有结构的独立参数的C ++函数是否安全?

来自分类Dev

PHP作曲家需要带有存储库详细信息的命令

来自分类Dev

我如何需要带有lein exec的clojure.java.io?

Related 相关文章

  1. 1

    需要带有Node和jQuery的JS

  2. 2

    未捕获的错误:Bootstrap的JavaScript需要带有requirejs的jQuery

  3. 3

    Bootstrap 下拉菜单需要带有 Angular 2 项目的 Popper.js

  4. 4

    由于某些原因,使用std :: make_pair需要带有boost :: flat_map的显式类型

  5. 5

    仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

  6. 6

    仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

  7. 7

    Webpack 添加 jQuery 插件:错误:jQuery 需要一个带有文档的窗口

  8. 8

    使用browserify填充jQuery插件

  9. 9

    我需要带有ReaderWriterLockSlim的MemoryBarrier吗?

  10. 10

    在React JS中需要带有变量的文件

  11. 11

    需要带有计数器的按键按钮

  12. 12

    需要带有计数器的按键按钮

  13. 13

    如何在Browserify中使用jQuery?

  14. 14

    结合使用Browserify和jQuery插件

  15. 15

    browserify全局和在模块中使用JQuery

  16. 16

    如何在Browserify中使用jQuery?

  17. 17

    使用通过Browserify导入的jQuery插件

  18. 18

    在带有Browserify的ES6中使用Bootstrap和jQuery包时出错

  19. 19

    使用jQuery对横幅动画产生多种效果

  20. 20

    使用带有 2 个按钮的 jQuery 旋转图像

  21. 21

    带有 Browserify / Shim CDN jQuery 的光滑轮播

  22. 22

    Browserify产生了无法使用的bundle.js

  23. 23

    需要带有TextTrimming和MaxLines的WPF TextBlock或TextBox

  24. 24

    我需要带有C11的GCC的-pedantic标志吗?

  25. 25

    需要带有纯抽象类类型参数的子句吗?

  26. 26

    我需要带有异步Web框架的celery吗?

  27. 27

    调用需要带有结构的独立参数的C ++函数是否安全?

  28. 28

    PHP作曲家需要带有存储库详细信息的命令

  29. 29

    我如何需要带有lein exec的clojure.java.io?

热门标签

归档