Contexte
Je viens de commencer à utiliser grunt il y a environ 30 minutes. Alors sois indulgent avec moi.
Mais j'ai un script assez simple qui va regarder mes js puis les compresser en un seul fichier pour moi.
Code
"use strict";
module.exports = function (grunt) {
// load all grunt tasks
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
beautify: true,
report: 'gzip'
},
build: {
src: ['docroot/js/*.js', 'docroot/components/pages/*.js', 'docroot/components/plugins/*.js'],
dest: 'docroot/js/main.min.js'
}
},
watch: {
options: {
dateFormat: function(time) {
grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString());
grunt.log.writeln('Waiting for more changes...');
}
},
js: {
files: '<%= uglify.build.src %>',
tasks: ['uglify']
}
}
});
grunt.registerTask('default', 'watch');
}
Question
Mon main.min.js est inclus à chaque fois dans la compilation. Cela signifie que mon min.js obtient 2x, 4x, 8x, 16x, etc. La meilleure façon de contourner cela est d'ajouter une exception et d'ignorer main.min.js
?
À la fin du tableau src, ajoutez
'!docroot/js/main.min.js'
Cela l'exclura. Le ! le transforme en une exclusion.
http://gruntjs.com/api/grunt.file#grunt.file.expand
Chemins correspondant aux modèles qui commencent par! sera exclu du tableau renvoyé. Les modèles sont traités dans l'ordre, donc l'ordre d'inclusion et d'exclusion est important.
Ce n'est pas spécifique à grunt uglify, mais toute tâche qui utilise la convention grunt pour spécifier des fichiers fonctionnera de cette façon.
Comme conseil général, je suggérerais de placer les fichiers construits ailleurs que vos fichiers source. Comme dans un dossier racine dist
.