我有一个 Backbone 应用程序,使用 Require.js 组织成模块。其中一个模块包含一个 Handlebars 帮助器,它有一个方法可以从我们所有的 HTML 模板中为每个视图提取一个合法的标题。标头包含在 HTML 注释中,因此我使用以下正则表达式将其剥离:
/<!--[\s\S]*?-->/g
现在,当我使用 r.js 优化(连接/编译/缩小)应用程序时,我正在使用 r.js 的onBuildWrite()
方法执行相同的 HTML 注释删除:
onBuildWrite: function (moduleName, path, contents) {
var htmlCommentRegex = /<!--[\s\S]*?-->/g;
return contents.replace(htmlCommentRegex, "");
},
现在,不幸的是,这意味着当包含 Handlebars 助手的 Require.js 模块被拉入 r.js 优化构建时,助手中的正则表达式文字被剥离,导致我的整个 r.js 构建被炸毁。
我试图通过有选择地将正则表达式应用于onBuildWrite()
除助手之外的所有模块来解决此问题:
onBuildWrite: function (moduleName, path, contents) {
var htmlCommentRegex = /<!--[\s\S]*?-->/g;
if (moduleName !== "helpers/handlebars.compileClean") {
contents = contents.replace(htmlCommentRegex, "");
}
return contents;
},
但是当在 r.js 配置中启用 uglification 时,这似乎不起作用;正则表达式 STILL 似乎在整个构建脚本上运行,包括帮助程序,导致构建爆炸。
如果在 r.js 配置中禁用了 uglify,则一切正常。
任何人都知道为什么 uglify 会打破这个?切换到不同的正则表达式,这将捕获 HTML 注释但忽略 HTML 注释正则表达式文字,解决问题吗?如果是这样,那个正则表达式会是什么样子?