Могу ли я иметь несколько файлов gruntjs в моем проекте для организации кода? - программирование
Подтвердить что ты не робот

Могу ли я иметь несколько файлов gruntjs в моем проекте для организации кода?

Я использую gruntjs для моего проекта и задавался вопросом, возможно ли иметь несколько файлов grunt.js в моем проекте? Причина, по которой я спрашиваю, заключается в том, что мой проект организован так:

grunt.js
|
|- project1
|   |
|   |-grunt.js
|
|- project2
|
|- project3 (etc..)

Я хочу, чтобы grunt.js верхнего уровня создавал все проекты. Однако по мере роста списка проектов я не хочу, чтобы мой файл grunt.js верхнего уровня стал огромным. Поэтому я хотел бы организовать его так, чтобы хрюкать на высшем уровне можно было вызвать файлы grunt на уровне проекта для их создания. Или, если кто-то хочет просто построить project1, они могут перейти в папку project1 и запустить его собственный grunt.js. Это можно сделать? Если да, то как я могу вызвать другие файлы grunt? Если нет, то какое альтернативное решение, кроме одного огромного файла grunt.js? Спасибо.

4b9b3361

Ответ 1

Там есть задача grunt grunt-hub, которая, похоже, делает то, что вы хотите сделать.

пехотинец-хаб:

Задача Grunt для просмотра и запуска задач в нескольких проектах Grunt.

Задача концентратора

Задача хаба для запуска задач по нескольким проектам. Он хотел бы знать, какие Gruntfiles использовать и какие задачи запускать в каждом проекте Grunt. Например, если я хотел бы нащупывать и тестировать по каждому проекту Grunt одну папку вверх:

Я не использовал его, но он мог бы соответствовать вашим требованиям. Также вы можете захотеть изучить более низкий уровень, например grunt-exec, или создать свои собственные задачи для создания дочерних процессов.

Ответ 2

Недавно я решил эту проблему с очень простым решением.
Я применил grunt.config.merge(config) для замены grunt.initConfig(config). Вы можете вызывать его несколько раз, и он просто объединяет конфигурацию в одну конфигурацию.

Обновить. По состоянию на Grunt v0.4.5 функция grunt.config.merge встроена, поэтому вам больше не нужно включать ее в отдельную библиотеку.

Это позволяет мне настроить мою конфигурацию по функции.
Я создаю файл конфигурации для каждой функции, например desktop-javascripts.js, desktop-css.js, mobile-javascripts.js, mobile-css.js.
Кроме того, они имеют общую конфигурацию в default-options.js, поэтому я могу указать параметры сжатия, а что нет.

Пример

Gruntfile.js:

module.exports = function(grunt) {

  require('./default-options.js')(grunt);
  require('./desktop-javascripts.js')(grunt);
  require('./desktop-css.js')(grunt);
  require('./mobile-javascripts.js')(grunt);
  require('./mobile-css.js')(grunt);

  grunt.loadNpmTasks('grunt-contrib-concat');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-watch');

};

настольные-javascripts.js:

module.exports = function(grunt) {

  // Configure all JavaScript tasks:
  grunt.registerTask('desktop-javascripts', [ 'concat:JS', 'jshint' ]);
  grunt.config.merge({
    concat: { 'JS': { files: allJS } },
    jshint: { 'JS': { files: allJS } },
    watch: { 'JS': { files: allJS, tasks: [ 'desktop-javascripts' ] } }
  });

};

Ответ 3

Я знаю, что этот вопрос может быть старым, но я хочу уточнить, что есть способ правильно упорядочить ваши коды.

Чтобы избежать многократного вызова:

grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');

Замените их:

require('load-grunt-tasks')(grunt);

И используйте:

grunt-config-dir

Запуск задач из папки.

Чтобы узнать больше об этом, проверить это.