Самый эффективный способ Grunt Concat каталогов файлов?
Я прошу прощения за очень неуклюжий заголовок вопроса, если кто-нибудь может придумать лучший способ сформулировать этот вопрос, я немедленно его заменю.
Я создаю приложение с Angular и RequireJS и пытаюсь оптимизировать производительность, зависимости и ленивую загрузку. Я пытаюсь построить структуру файла следующим образом:
/app
----/regisitration
--------_registration.module.js
--------registration.ctrl.js
--------registration.svc.js
--------registration.directive.js
----/courses
--------_courses.module.js
--------courses.directive.js
--------courses.controller.js
--------courses.service.js
--------/course
------------course.controller.js
----/admin
--------_admin.module.js
--------admin.controller.js
Там, где я настроил свою маршрутизацию, я хочу, чтобы у меня был пользователь, который посещает любой /registration/
просмотреть загрузку в целом _registration.module.js
что было бы объединением всех других .js
файлы в /registraion
каталог (и любые подкаталоги), чтобы моя команда не была застопорена необходимостью включать несколько и, возможно, дублирующиеся зависимости, а также обслуживать весь раздел сайта для пользователя за один раз. Надеемся, что приведенный выше пример показывает, почему я не хотел бы просто загружать все файлы с фронта, потому что большинство пользователей никогда не нажмут admin
раздел сайта. Я пытаюсь найти наиболее эффективный способ добиться этого с помощью grunt, но до сих пор я работаю очень вручную с таким кодом:
grunt.initConfig({
concat: {
app: {
files: [
{
src: ['..app/registration/*.js', '!..app/registraion/*.module.js'],
dest: '..app/registration/_registration.module.js'
},
{
src: ['..app/courses/*.js', '!..app/courses/*.module.js'],
dest: '..app/courses/_courses.module.js'
},
{
src: ['..app/admin/*.js', '!..app/admin/*.module.js'],
dest: '..app/admin/_admin.module.js'
}
],
}
},
});
Я думаю, что должен быть более эффективный и менее ручной способ сделать то, чего я пытаюсь достичь. У кого-нибудь есть предложения?
1 ответ
Помните, что вы все еще можете выполнять JavaScript внутри своего Gruntfile.
grunt.initConfig({
concat: {
app: {
files: grunt.file.expand({ cwd: 'app', filter: 'isDirectory' }, '*')
.map(function(ngModule) {
return {
src: ['app/' + ngModule + '/*.js', '!app/' + ngModule + '/*.module.js'],
dest: 'app/' + ngModule + '/_' + ngModule + '.module.js'
};
})
}
},
});
Благодаря этому вы сможете создавать новые модули, не забывая обновлять запись конфигурации для них.