Normalmente, no Gulp, as tarefas são assim:
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));
});
É possível passar um sinalizador de linha de comando para o gulp (isso não é uma tarefa) e executar tarefas condicionalmente com base nisso? Por exemplo
$ gulp my-task -a 1
E então no meu 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
fonte
fonte
process.argv
para acessar os argumentos da linha de comando.Respostas:
O Gulp não oferece nenhum tipo de utilitário para isso, mas você pode usar um dos muitos analisadores de comandos args. Eu gosto
yargs
. Deveria estar:Você também pode combiná-lo com
gulp-if
o canal condicional do fluxo, muito útil para a criação de desenvolvedores vs. produtos:E ligue com
gulp my-js-task
ougulp my-js-task --production
.fonte
npm run gulp
, você deve usá-lo comonpm run gulp -- --production
.Editar
gulp-util
foi descontinuado e deve ser evitado; portanto, é recomendável usar o minimist , quegulp-util
já foi usado.Então, eu mudei algumas linhas no meu gulpfile para remover
gulp-util
:Original
No meu projeto, eu uso o seguinte sinalizador:
Gulp oferece um objeto
gulp.env
para isso. Ele foi descontinuado nas versões mais recentes, então você deve usar o gulp-util para isso. As tarefas são assim:A configuração do ambiente está disponível durante todas as subtarefas. Para que eu possa usar esse sinalizador também na tarefa de observação:
E a minha tarefa de estilos também funciona.
Ciao Ralf
fonte
gulp.env
está sendo preterido , como você pode ver pela mensagem de log do console ao executá-lo. Eles pedem que você use seu próprio analisador e sugirayargs
ouminimist
.util.env.theme ? util.env.theme : 'main'
parautil.env.theme || 'main'
. Enfim +1.gulp-util
utilizaminimist
biblioteca para análise de argumento de linha de comando. Portanto, se você estiver usandogulp-util
, não precisará de uma biblioteca extra para esse fim. Documento: github.com/substack/minimistAqui está uma receita rápida que encontrei:
gulpfile.js
CLI
Ref original (não está mais disponível): https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-params-from-cli.md
Alternativa com minimist
Da atualização atualizada: https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md
gulpfile.js
CLI
fonte
Existe uma maneira muito simples de fazer
on/off
sinalizadores sem analisar os argumentos.gulpfile.js
é apenas um arquivo que é executado como outro qualquer, então você pode fazer:E use algo como
gulp-if
para executar condicionalmente uma etapaA execução
gulp build
produzirá um bom html, enquantogulp production build
o minificará.fonte
gulp.task('mytask', function() { if (flags.myflag ) { flaggedtask } else { unflaggedask } });
flags
.Se você possui alguns argumentos estritos (ordenados!), Pode obtê-los simplesmente verificando
process.argv
.Execute:
gulp --env production
... no entanto, acho que isso é muito estrito e não à prova de balas! Então, eu brinquei um pouco ... e acabei com esta função de utilitário:
Ele usa um nome de argumento e o procurará em
process.argv
. Se nada foi encontrado, ele cospenull
. Caso contrário, se não houver um próximo argumento ou o próximo argumento for um comando e não um valor (diferimos com um traço)true
será retornado. (Isso ocorre porque a chave existe, mas simplesmente não há valor). Se todos os casos anteriores falharem, o próximo valor de argumento é o que obtemos.> gulp watch --foo --bar 1337 -boom "Foo isn't equal to bar."
Ok, chega por enquanto ... Aqui está um exemplo simples usando gulp :
Executá-lo
gulp --env production
fonte
if (args[0] === '--env' && args[1] === 'production');
, pelo menos em gole 3.8.11Eu construí um plug-in para injetar parâmetros da linha de comando no retorno de chamada da tarefa.
https://github.com/stoeffel/gulp-param
Se alguém encontrar um bug ou tiver uma melhoria, fico feliz em mesclar PRs.
fonte
E se você estiver usando o typescript (
gulpfile.ts
), faça isso parayargs
(com base na excelente resposta de @Caio Cunha https://stackoverflow.com/a/23038290/1019307 e outros comentários acima):Instalar
.ts
arquivosAdicione isso aos arquivos .ts:
Isso deve ser feito em cada arquivo .ts individualmente (mesmo nos
tools/tasks/project
arquivos importados para ogulpfile.ts/js
).Corre
Ou então,
npm
passe o argumento até gulp:fonte
Passar argumentos da linha de comando
Em seguida, execute gulp com:
Fonte
fonte
A CLI
gulp production
chama minha tarefa de produção e define um sinalizador para quaisquer condicionais.fonte
Queríamos para passar um arquivo de configuração diferente para ambientes diferentes - um para produção , dev e teste . Este é o código no arquivo gulp:
Este é o código no arquivo app.js:
E então para executá-lo gole
--env=testing
fonte
Já faz algum tempo desde que esta pergunta foi publicada, mas talvez ajude alguém.
Estou usando o GULP CLI 2.0.1 (instalado globalmente) e o GULP 4.0.0 (instalado localmente). Aqui está como você faz isso sem nenhum plug-in adicional. Eu acho que o código é bastante auto-explicativo.
E execute a partir do console:
Em seguida, execute e veja as diferenças:
fonte