Могу ли я иметь несколько файлов gruntjs в моем проекте для организации кода?
Я использую gruntjs для моего проекта и задавался вопросом, возможно ли иметь несколько файлов grunt.js в моем проекте? Причина, по которой я спрашиваю, заключается в том, что мой проект организован так:
grunt.js
|
|- project1
| |
| |-grunt.js
|
|- project2
|
|- project3 (etc..)
Я хочу, чтобы grunt.js верхнего уровня создавал все проекты. Однако по мере роста списка проектов я не хочу, чтобы мой файл grunt.js верхнего уровня стал огромным. Поэтому я хотел бы организовать его так, чтобы хрюкать на высшем уровне можно было вызвать файлы grunt на уровне проекта для их создания. Или, если кто-то хочет просто построить project1, они могут перейти в папку project1 и запустить его собственный grunt.js. Это можно сделать? Если да, то как я могу вызвать другие файлы grunt? Если нет, то какое альтернативное решение, кроме одного огромного файла grunt.js? Спасибо.
Ответы
Ответ 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
Запуск задач из папки.
Чтобы узнать больше об этом, проверить это.