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 命名空间问题的主要内容,如果未能解决你的问题,请参考以下文章