Я бы хотел, чтобы мой templateCache был в моем основном модуле angular — для пояснения давайте назовем этот модуль «приложением». Я настроил задачу gulp-angular-templatecache для создания кэша шаблонов:
gulp.task('templates', function () {
return gulp.src(path.templates)
.pipe(templateCache({
moduleSystem: 'IIFE',
standalone: false,
root: 'views/',
module: "app"
}))
.pipe(gulp.dest(path.dist));
});
Это создает модуль IIFE, который выглядит следующим образом:
(function(){
angular.module("app").run(["$templateCache", function($templateCache) {
$templateCache.put("views/add_tag_dlg.html",...
...
})();
Это довольно разумно, но для работы main.js (который содержит угловую точку входа) необходимо запустить ПЕРВЫМ, чтобы создать модуль «приложение».
Я считаю, что это ситуация курицы и яйца. Приложение не загрузится, потому что я инициализирую его до загрузки шаблонов; но я не могу инициализировать шаблоны заранее, потому что угловой модуль «приложение» еще не создан.
Единственное решение, которое я нашел до сих пор, — заставить задачу gulp создать свой собственный отдельный модуль, назовем его «шаблоны»:
gulp.task('templates', function () {
return gulp.src(path.templates)
.pipe(templateCache({
moduleSystem: 'IIFE',
standalone: true,
root: 'views/',
module: "templates"
}))
.pipe(gulp.dest(path.dist));
});
Что производит это:
(function(){
angular.module("templates", []).run(["$templateCache", function($templateCache) {
$templateCache.put("views/add_tag_dlg.html",...
...
})();
Обратите внимание, что вместо того, чтобы просто использовать модуль angular, он создает свой собственный. Чтобы это работало, когда я создаю свой основной модуль, он должен зависеть от «шаблонов»:
var app = angular.module('app', ['templates', ... ]);
Это работает, но это не то, что я хочу, потому что теперь нет возможности запустить без компиляции шаблонов. Я предпочитаю рабочий процесс, в котором мне не нужно компилировать шаблоны для отладки... они просто загружаются браузером как ресурсы в подкаталоге views/.
Так что я не совсем уверен, что делать здесь. Лучшее, что я придумал до сих пор, это иметь другой index.html как для сценариев разработки, так и для сценариев производства, и перестать рассматривать «шаблоны» как глобальный модуль systemjs... затем для разработчика загрузить пустой кеш шаблона, а для производства загрузить сгенерированный.
Либо так, либо я могу полностью удалить angular из стратегии загрузки systemjs и просто загрузить angular самостоятельно, но я ненавижу это делать. Очень приятно, что я просто загружаю app.js, а angular (и все его компоненты) перечислены в systemjs как зависимости от app.js, поэтому он просто делает все сам в правильном порядке.
Ни одно из семян, которые мне удалось найти, не решает эту проблему. Каково преобладающее мнение о том, как обрабатывать кэши шаблонов в среде systemjs?