RequireJS + jQuery 命名空间问题

Posted

技术标签:

【中文标题】RequireJS + jQuery 命名空间问题【英文标题】:RequireJS + jQuery namespace issue 【发布时间】:2012-11-30 14:31:02 【问题描述】:

如果我在没有“命名空间:'foo'”标志的情况下运行优化器,一切都会按预期工作。当我将“命名空间:'foo'”添加到 app.build.js 中时,出现此错误:

GET: file:// (项目路径) /require-jquery/jquery-require-sample/webapp/jquery.js main-built.js:main-built.js:1839

未捕获的错误:脚本错误http://requirejs.org/docs/errors.html#scripterror main-built.js:163

我已经四处寻找解决方案,但是关于使用 RequireJS 优化器导出单个文件、带有 jquery 和命名空间的信息很少。谢谢!

我已经把 RequireJS + jQuery 示例项目(带有修改的 app.build.js 和 app.html)on github here.

(
    baseUrl: ".",
    out: 'main-built.js',
    //Comment out the optimize line if you want
    //the code minified by UglifyJS
    optimize: "none",

    paths: 
        "jquery": "require-jquery"
    ,

    name: 'main',
    namespace: 'foo'
)

【问题讨论】:

【参考方案1】:

我知道我在这里聚会迟到了,但是只要用谷歌搜索就很容易找到这个帖子。

jquery 中有 AMD 检测功能。 您正在为 requirejs 使用命名空间,这会导致 define 函数的所有调用发生一些变化。

这会导致 jquery 发生变化,从而破坏它(或者只是实际定义代码,但您的命名空间调用无论如何都不起作用)

我目前正在解决这个问题。我看到以下选项:

    在全球范围内使用 jQuery,就像 2005 年一样 hack 需要命名空间来理解 AMD 检测 为 jquery 编写一个 shim 以使其工作

我将尝试第三个选项,如果有任何要报告的内容,我会回来报告

[编辑]

Namespacing 也可以在 shim 内部工作 :( 这没有任何意义,但它就是这样做的。截至目前,我不知道如何使它与 shim 一起工作并且不对 jquery 本身进行任何更改。如果你愿意为了摆弄 jquery,在末尾附近有一行测试 define 是否是用于定义 AMD 模块的函数。打破这一行(例如,通过添加 false &&)并且您有一个工作垫片。

【讨论】:

【参考方案2】:

尝试删除 name 参数(除非你真的需要它)。

【讨论】:

以上是关于RequireJS + jQuery 命名空间问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 RequireJS 的 Javascript 命名空间,为啥?

使用命名空间调用 jquery

Django 管理员 - jQuery 命名空间

requireJS模块化

我应该在 jquery 小部件上使用啥命名空间?

JQuery 命名空间是一个好习惯吗?