给出以下AMD模块(messages.js):
/*************************************************************************
* Copyright blah blah blah
*
*************************************************************************
*
* @description
* Super detailed description here...
*
* @author
* Eric Steele
*
*************************************************************************/
define(['angular'], function() {
return "here's a message!";
});
使用看起来像这样的RequireJS配置......
require.config({
baseUrl: 'javascripts',
paths: {
'angular': '../bower_components/angular/angular.min',
'messages': './shared/services/messages',
}
});
以下r.js配置:
({
baseUrl: "javascripts",
mainConfigFile: './javascripts/requirejs-config.js',
optimize: 'none',
optimizeCss: "none",
waitSeconds: 0,
name: 'app',
wrapShim: 'true',
preserveLicenseComments: false,
out: './javascripts/app-built.js'
})
我在构建输出中得到以下内容:
/*************************************************************************
* Copyright blah blah blah
*
******'messages',*******************************************************************
*
* @description
* Super detailed description here...
*
* @author
* Eric Steele
*
*************************************************************************/
define(['angular'], function() {
return "here's a message!";
});
如您所见,r.js已在注释块中插入模块名称“messages”,而不是将其作为define()调用的第一个参数。
如果删除文件头,则模块名称正确插入如下:
define('messages',['angular'], function() {
return "here's a message!";
});
但是,如果我在文件的开头留下一个空行,如下所示:
// pretend this comment is a blank line
define(['angular'], function() {
return "here's a message!";
});
然后我在构建输出中看到了这个:
'messages',
define(['angular'], function() {
return "here's a message!";
});
似乎r.js希望我的define()调用位于文件的顶部。否则,它无法将模块名称正确插入define()。
我正在使用r.js版本2.1.15。构建完成没有错误。
知道如何解决这个问题吗?
更新1 我忘了提到构建输出文件中包含许多其他换行符。如果我在define()调用中为模块命名,这些添加的换行符就会消失。给他们一个名字也解决了插入问题。但是,我已经读过,给模块一个固定名称是一种不好的做法(r.js应该生成它们)。到目前为止,这似乎是最好的解决方案,但我想知道为什么r.js首先打破......