我已经开始在一个虚拟项目中使用require。现在我想使用r.js脚本来构建我的项目以供生产。
其背景是:
问题是我的ModuleA变成了:
define(dep1 ..);
define(dep2 ..);
define(ModuleA ..);但是没有任何东西从ModuleA加载。来自ModeulA的代码在开发中加载并执行,代码生成后加载但不运行。
我怎么才能解决这个问题?
更新
http://pastebin.com/p1xUcY0A -> start.js
http://pastebin.com/dXa6PtpX -> ModuleA js-动画.js
http://pastebin.com/xcCvhLrT -> ModuleB css-动画. deps deps。
http://pastebin.com/j51V5kMt ->运行优化器时使用的r.js配置文件。
http://pastebin.com/UVkWjwe9 ->js-动画.js如何处理运行r.js的问题。这是有问题的文件。我没有从这个文件中得到js动画模块。要求不返回我的js动画对象。
编辑:
在删除模块定义末尾的.js之后,从js开始,优化的start.js是http://pastebin.com/LfaLkJaT,js-动画模块是http://pastebin.com/qwnpkCC6。在chrome中,我在控制台http://pastebin.com/Hq7HGcmm中得到了这个错误。
发布于 2012-09-20 06:57:52
对于当前的require.js实现来说,这似乎是个问题。方法是创建一个全局中介或中介模块,并让所有动态加载的模块调用中介,并通过事件宣布自己。这对我有用。
发布于 2012-08-18 13:59:50
我认为您的设置的问题在于您在.js中结束了模块依赖名。根据文件:
默认情况下,RequireJS还假定所有依赖项都是脚本,因此它不会在模块ID上看到尾随的".js“后缀。当将模块ID转换为路径时,RequireJS将自动添加它。
如果RequireJS看到以.js结尾的模块名,则假定模块名称是相对于文档的路径。通过在.js中结束模块依赖名,它在开发模式下工作良好,因为RequireJS将加载指定为依赖项的文件。在您的示例中,它将加载文件js/js-animation.js,查看匿名define并正确加载模块。
在生产中,您的start.js模块仍然需要"js/js-animation.js"。RequireJS将在path js/js-animation.js加载优化模块,但现在优化器已经将您的匿名模块转换为命名模块(在本例中为"js/js-animation")。其结果是文件将被加载,但是文件中没有define'd模块具有与"js/js-animation.js"匹配的名称,因此从某种意义上说,您的动画模块是缺失的。
解决方案/ TL;DR:从所有模块依赖名(以及r.js配置中的模块定义)中移除尾随的.js,您应该没事。因此,您的start.js应该变成(第4行的更改):
require([], function () {
var $html = $("html"),
animationModule = localStorage['cssanimations'] == 'true' ?
'js/css-animation' : 'js/js-animation',
$doc = $html.find("body");
console.debug("loading ", animationModule);
require([animationModule], function( animationModule ) {
animationModule.run({
target : $("div.flex")
});
} );
} );还请注意,您可能希望在您的baseUrl配置中使用paths和paths来清理模块名(例如,您可以删除js/前缀)。
https://stackoverflow.com/questions/11855422
复制相似问题