Sources :
Problématique :
Ce message laissé sur Stack Overflow. J’utilise Gulp pour minifier 2 types bien distincts de fichiers JS :
- L’ensemble des fichiers JS stockés dans un dossier
./src/js
qui sont des plugins custom écrits spécifiquement pour les besoins du projet ou des vendor (ou « third-party ») plugins surchargés et modifiés spécifiquement pour les besoins du projets.
.
- Une sélection de fichiers JS stockés dans un dossier
./src/vendor/[...]
qui sont des vendor plugins que je souhaite utiliser en l’état, sans les modifier (composant Bootstrap, Modernizr, ou autre…).
J’utilise un fichier de configuration externe gulpconf.json
pour (notamment) constituer une liste de chemins vers les third-party plugins que je souhaite ajouter aux sources de mon projet. Ce fichier ressemble à ceci :
|
{ "js" : { "vendor" : [ "./src/vendor/browser-detection/src/browser-detection.js", "./src/vendor/foundation/js/foundation.js", "./src/vendor/modernizr/lib/metadata.js", "./src/vendor/jquery-mobile/js/events/navigate.js", "./src/vendor/jquery-mobile/js/events/touch.js", "./src/vendor/jquery-ui/ui/jquery.ui.autocomplete.js", "./src/vendor/jquery-ui/ui/jquery.ui.effect-clip.js", "./src/vendor/jquery-ui/ui/jquery.ui.effect-bounce.js" ] } } |
Le problème est que lorsque je lance ma tâche gulp watch
, des modifications (typiquement, l’ajout d’un chemin vers un nouveau vendor plugin que je souhaite ajouter à mon projet) sont détectées dans mon fichier de config mais elles ne sont pas appliquées. Exemple des logs que j’obtiens :
|
[09:26:53] File /home/cms/project/themes/starter/gulpconf.json was changed [09:26:53] Starting 'clear_vendor_cache'... [09:26:53] Finished 'clear_vendor_cache' after 1.56 ms [09:26:53] Starting 'js'... [09:26:53] Finished 'js' after 4.67 ms |
Solution :
A partir du JSON fourni plus haut, dans le gulpfile.js
placer ces différentes parties :
|
var appFiles = { scripts: [paths.scripts.src + '*.js', './gulpconf.json'] }; |
|
var fs = require('fs'); var gulpconf = "./gulpconf.json"; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
gulp.task('js:vendor',function(){ var json = JSON.parse(fs.readFileSync(gulpconf)), vendorjs = json.js.vendor; gulp.src(vendorjs) .pipe(plugins.uglify()) .pipe(plugins.rename(function(opt) { opt.basename = opt.basename.replace(/\./g,'-'); return opt; })) .pipe(plugins.size()) .pipe(gulp.dest(paths.scripts.dest)); }); gulp.task('js:custom', function() { gulp.src(paths.scripts.src + '*.js') .pipe(plugins.uglify()) .pipe(plugins.rename(function(opt) { opt.basename = opt.basename.replace(/\./g,'-'); return opt; })) .pipe(plugins.size()) .pipe(gulp.dest(paths.scripts.dest)); }); |
|
gulp.task('watch', ['sprite:svg', 'style', 'js:vendor', 'js:custom'], function(){ gulp.watch('./src/images/sprites/svg/*.svg', ['sprite:svg']); gulp.watch(appFiles.styles, ['style']).on('change', function(evt) { changeEvent(evt); }); gulp.watch(appFiles.scripts, ['js:vendor', 'js:custom']).on('change', function(evt) { changeEvent(evt); }); gulp.watch(paths.sprite.src, ['sprite']).on('change', function(evt) { changeEvent(evt); }); }); |