文件头注释块中断RequireJS Optimizer r.js

时间:2014-09-19 19:47:55

标签: javascript requirejs r.js

给出以下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首先打破......

0 个答案:

没有答案