У меня есть приложение Backbone, организованное в модули с использованием Require.js. Один из этих модулей содержит хелпер Handlebars, у которого есть метод, который я использую для извлечения легального заголовка из всех наших HTML-шаблонов для каждого представления. Заголовок содержится в комментарии HTML, поэтому я использую следующее регулярное выражение, чтобы удалить его:
/<!--[\s\S]*?-->/g
Теперь, когда я оптимизирую (объединяю/компилирую/минифицирую) приложение с помощью r.js, я делаю то же самое удаление комментариев HTML, используя метод onBuildWrite()
r.js:
onBuildWrite: function (moduleName, path, contents) {
var htmlCommentRegex = /<!--[\s\S]*?-->/g;
return contents.replace(htmlCommentRegex, "");
},
К сожалению, это означает, что когда модуль Require.js, содержащий вспомогательную функцию Handlebars, втягивается в оптимизированную для 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; Регулярное выражение ПО-ПРЕЖНЕМУ выполняется для всего собранного скрипта, включая помощника, что приводит к сбою сборки.
Если в конфиге r.js отключен uglify, то все работает нормально.
У кого-нибудь есть идеи, почему uglify может сломать это? Решит ли переключение на другое регулярное выражение, которое будет фиксировать HTML-комментарии, но ИГНОРИРОВАТЬ литерал регулярного выражения HTML-комментария? Если да, то как будет выглядеть это регулярное выражение?