Normalmente en Gulp las tareas se ven así:
gulp.task('my-task', function() {
return gulp.src(options.SCSS_SOURCE)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
¿Es posible pasar un indicador de línea de comando para tragar (eso no es una tarea) y hacer que ejecute tareas condicionalmente en función de eso? Por ejemplo
$ gulp my-task -a 1
Y luego en mi gulpfile.js:
gulp.task('my-task', function() {
if (a == 1) {
var source = options.SCSS_SOURCE;
} else {
var source = options.OTHER_SOURCE;
}
return gulp.src(source)
.pipe(sass({style:'nested'}))
.pipe(autoprefixer('last 10 version'))
.pipe(concat('style.css'))
.pipe(gulp.dest(options.SCSS_DEST));
});
javascript
node.js
gulp
Asolberg
fuente
fuente
process.argv
para acceder a los argumentos de la línea de comandos.Respuestas:
Gulp no ofrece ningún tipo de utilidad para eso, pero puede usar uno de los muchos analizadores de argumentos de comando. Me gusta
yargs
. Debiera ser:También puede combinarlo
gulp-if
para canalizar condicionalmente la transmisión, muy útil para la creación de desarrollo frente a producción:Y llama con
gulp my-js-task
ogulp my-js-task --production
.fuente
npm run gulp
entonces debe usarlo comonpm run gulp -- --production
.Editar
gulp-util
está en desuso y debe evitarse, por lo que se recomienda usar minimist en su lugar, quegulp-util
ya se usó.Así que he cambiado algunas líneas en mi archivo para eliminar
gulp-util
:Original
En mi proyecto uso la siguiente bandera:
Gulp ofrece un objeto
gulp.env
para eso. Está en desuso en las versiones más recientes, por lo que debe usar gulp-util para eso. Las tareas se ven así:La configuración del entorno está disponible durante todas las subtareas. Así que también puedo usar esta bandera en la tarea de observación:
Y mi tarea de estilos también funciona.
Ciao Ralf
fuente
gulp.env
está en desuso , como puede ver en el mensaje de registro de la consola al ejecutarlo. Te piden que uses tu propio analizador y te sugieranyargs
ominimist
.util.env.theme ? util.env.theme : 'main'
autil.env.theme || 'main'
. De todos modos +1.gulp-util
utiliza laminimist
biblioteca para el análisis de argumentos de línea de comando. Entonces, si está utilizandogulp-util
, no necesita una biblioteca adicional para ese propósito. Documento: github.com/substack/minimistAquí hay una receta rápida que encontré:
gulpfile.js
CLI
Referencia original (ya no está disponible): https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-params-from-cli.md
Alternativa con minimista
De Ref actualizado: https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
gulpfile.js
CLI
fuente
Hay una manera muy simple de hacer
on/off
banderas sin analizar los argumentos.gulpfile.js
es solo un archivo que se ejecuta como cualquier otro, por lo que puede hacer:Y use algo como
gulp-if
ejecutar condicionalmente un pasoLa ejecución
gulp build
producirá un buen html, mientras quegulp production build
lo minimizará.fuente
gulp.task('mytask', function() { if (flags.myflag ) { flaggedtask } else { unflaggedask } });
flags
.Si tiene algunos argumentos estrictos (¡ordenados!), Puede obtenerlos simplemente marcando
process.argv
.Ejecutalo:
gulp --env production
... sin embargo, creo que esto es demasiado estricto y no a prueba de balas. Entonces, jugueteé un poco ... y terminé con esta función de utilidad:
Come un nombre de argumento y buscará esto en
process.argv
. Si no se encuentra nada, se escupenull
. De lo contrario, si no hay un siguiente argumento o si el siguiente argumento es un comando y notrue
se devuelve un valor (diferimos con un guión) . (Eso es porque la clave existe, pero simplemente no hay valor). Si todos los casos anteriores fallarán, el siguiente argumento-valor es lo que obtenemos.> gulp watch --foo --bar 1337 -boom "Foo isn't equal to bar."
Ok, suficiente por ahora ... Aquí hay un ejemplo simple usando gulp :
Ejecutarlo
gulp --env production
fuente
if (args[0] === '--env' && args[1] === 'production');
al menos en el trago 3.8.11Construí un complemento para inyectar parámetros desde la línea de comandos en la devolución de llamada de la tarea.
https://github.com/stoeffel/gulp-param
Si alguien encuentra un error o lo mejora, me complace fusionar los RP.
fuente
Y si está utilizando typecript (
gulpfile.ts
), haga esto parayargs
(basándose en la excelente respuesta de @Caio Cunha https://stackoverflow.com/a/23038290/1019307 y otros comentarios anteriores):Instalar en pc
.ts
archivosAgregue esto a los archivos .ts:
Esto debe hacerse en cada archivo .ts individualmente (incluso los
tools/tasks/project
archivos que se importan engulpfile.ts/js
).correr
O debajo de
npm
pasar el argumento a tragar:fuente
Pase argumentos desde la línea de comando
Luego corre tragando con:
Fuente
fuente
CLI
gulp production
llama a mi tarea de producción y establece un indicador para cualquier condición.fuente
Queríamos pasar un archivo de configuración diferente para diferentes entornos - uno para la producción , dev y pruebas . Este es el código en el archivo gulp:
Este es el código en el archivo app.js:
Y luego correrlo tragar
--env=testing
fuente
Ha pasado algún tiempo desde que se publicó esta pregunta, pero tal vez ayude a alguien.
Estoy usando GULP CLI 2.0.1 (instalado globalmente) y GULP 4.0.0 (instalado localmente) aquí es cómo lo hace sin ningún complemento adicional. Creo que el código se explica por sí mismo.
Y correr desde la consola:
Luego corre y ve las diferencias:
fuente