javascript - cli - install gulp mac
¿Cómo hacer que Gulp.src falle si falta un archivo? (2)
Como no parecía haber una solución lista para esto, escribí un módulo para satisfacer nuestras necesidades.
El módulo de archivos existentes le permite verificar si todos los archivos en una matriz están presentes, arrojando un error si falta alguno. Devuelve una matriz idéntica de éxito, por lo que es fácil colocarla en su lugar.
var jsFiles = [
sourcePath + ''/config/config.js'',
sourcePath + ''/vendor/jquery/dist/jquery.js'',
sourcePath + ''/vendor/js-cookie/src/js.cookie.js'',
sourcePath + ''/vendor/modernizr/modernizr.js'',
sourcePath + ''/vendor/lodash/lodash.js'',
sourcePath + ''/vendor/picturefill/dist/picturefill.min.js'',
sourcePath + ''/templates/**/*.js'',
sourcePath + ''/pages/**/*.js''
],
filesExist = require(''files-exist''),
gulp.task(''build:js'', [''jscs''], function() {
return gulp.src(filesExist(jsFiles)) // Throws error if a file is missing
.pipe(concat(''scripts.js''))
.pipe(gulpif(isProd, uglify()))
.pipe(gulp.dest(outputPath + ''/webresources/js''));
});
Nuestra compilación gulp toma un grupo de bibliotecas instaladas con bower, luego las concatena con todo el código que hemos distribuido en varios directorios. Esto es lo que parece:
var jsFiles = [
sourcePath + ''/config/config.js'',
sourcePath + ''/vendor/jquery/dist/jquery.js'',
sourcePath + ''/vendor/js-cookie/src/js.cookie.js'',
sourcePath + ''/vendor/modernizr/modernizr.js'',
sourcePath + ''/vendor/lodash/lodash.js'',
sourcePath + ''/vendor/picturefill/dist/picturefill.min.js'',
sourcePath + ''/templates/**/*.js'',
sourcePath + ''/pages/**/*.js''
],
gulp.task(''build:js'', [''jscs''], function() {
return gulp.src(jsFiles)
.pipe(concat(''scripts.js''))
.pipe(gulpif(isProd, uglify()))
.pipe(gulp.dest(outputPath + ''/webresources/js''));
});
Nuestro problema es que cada vez que alguien agrega nuevas bibliotecas, otros desarrolladores encontrarán problemas si no han ejecutado bower install
para obtener los nuevos componentes. El scripts.js
se construye sin ellos, ya que no le importará que uno de los componentes vuelva a estar vacío, incluso si se trata de un archivo con nombre.
¿Cómo se debe resolver esto? ¿Hay alguna manera de arrojar un error si un glob devuelve cero resultados?
He usado este paquete IsThere
https://www.npmjs.com/package/is-there
ex.
PATHS:
javascriptCopyNodeModules:
# - "node_modules/name.min.js"
import IsThere from ''is-there'';
function javascriptCopyNodeModules() {
if(IsThere(PATHS.javascriptCopyNodeModules)){
return gulp.src(PATHS.javascriptCopyNodeModules)
.pipe(gulp.dest(PATHS.dist + ''/assets/js/node_modules''));
}else{
return gulp.src(''.'');
}
}
ya que PATHS.javascriptCopyNodeModules está vacío (#) no devuelve nada.