Puis-je avoir plusieurs fichiers gruntjs dans mon projet d'organisation de code?

J'utilise gruntjs pour mon projet et je me demandais s'il était possible d'avoir plusieurs fichiers grunt.js dans mon projet? La raison pour laquelle je demande est que mon projet est organisé de la sorte:

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

Je veux que le niveau supérieur grunt.js crée tous les projets. Cependant, à mesure que la liste des projets augmentent, je ne veux pas que mon fichier grunt.js de haut niveau devienne énorme. Je voudrais donc l'organiser afin que le grognement de niveau supérieur puisse appeler les fichiers grunt au niveau du projet pour les construire. Ou si quelqu'un veut simplement construire project1, ils peuvent aller au dossier project1 et exécuter son propre grunt.js. Est-ce possible? Si oui, comment puis-je appeler les autres fichiers gruntés? Sinon, alors, quelle solution alternative autrement que d'avoir un énorme fichier grunt.js? Merci.

Il y a une tâche grincheuse appelée grunt-hub qui semble faire ce que vous voulez faire.

Grunt-hub:

Une tâche grunge de surveiller et d'exécuter des tâches sur plusieurs projets Grunt.

Tâche Hub

La tâche du concentrateur consiste à exécuter des tâches sur plusieurs projets. Il voudrait savoir quel Gruntfiles doit utiliser et quelles tâches exécuter sur chaque projet Grunt. Par exemple, si je voudrais faire de la peluche et tester sur chaque projet Grunt, un dossier:

Je ne l'ai pas utilisé, mais cela pourrait répondre à vos besoins. De plus, vous voudrez peut-être examiner plus bas niveau comme grunt-exec ou créer vos propres tâches pour engendrer des processus enfants.

J'ai récemment résolu ce problème avec une solution très simple.
J'ai implémenté grunt.config.merge(config) pour remplacer grunt.initConfig(config) . Vous pouvez l'appeler plusieurs fois, et il fusionnera simplement la configuration en une configuration unique.

Mise à jour : à partir de Grunt v0.4.5, la fonction grunt.config.merge est intégrée, donc vous n'avez plus besoin de l'inclure dans une bibliothèque distincte.

Cela me permet d'organiser ma configuration par fonctionnalité.
Je crée un fichier de configuration pour chaque fonctionnalité, tel que desktop-javascripts.js , desktop-css.js , mobile-javascripts.js , mobile-css.js .
En outre, ils partagent la configuration commune dans default-options.js , donc je peux spécifier les paramètres de compression et ce qui ne l'est pas.

Exemple

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'); }; 

Desktop-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' ] } } }); }; 

Je sais que cette question pourrait être ancienne, mais je tiens à préciser qu'il existe un moyen d'organiser correctement vos codes.

Pour éviter d'avoir plusieurs appels comme ceci:

 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'); 

Remplacez-les par:

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

Et utilise:

 grunt-config-dir 

Pour exécuter les tâches à partir d'un dossier.

Pour en savoir plus, vérifiez ceci.