Самый эффективный способ 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'
        };
      })
    }
  },
});

Благодаря этому вы сможете создавать новые модули, не забывая обновлять запись конфигурации для них.

Другие вопросы по тегам