374 votes

Est-il possible de passer un drapeau à Gulp pour qu'il exécute les tâches de différentes manières ?

Normalement, dans Gulp, les tâches ressemblent à ceci :

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));
});

Est-il possible de passer un drapeau de ligne de commande à gulp (qui n'est pas une tâche) et de faire en sorte qu'il exécute des tâches de manière conditionnelle en fonction de cela ? Par exemple

$ gulp my-task -a 1

Et ensuite dans mon 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));
});

11 votes

Comme il s'exécute en node, vous pourriez probablement utiliser process.argv pour accéder aux arguments de la ligne de commande.

7voto

stoeffel Points 228

J'ai construit un plugin pour injecter les paramètres de la ligne de commande dans le callback de la tâche.

gulp.task('mytask', function (production) {
  console.log(production); // => true
});

// gulp mytask --production

https://github.com/stoeffel/gulp-param

Si quelqu'un trouve un bogue ou a une amélioration à apporter, je suis heureux de fusionner les RPs.

4voto

HankCa Points 176

Et si vous utilisez le script ( gulpfile.ts ) alors faites ceci pour yargs (en s'appuyant sur l'excellente réponse de @Caio Cunha https://stackoverflow.com/a/23038290/1019307 et autres commentaires ci-dessus) :

Installer

npm install --save-dev yargs

typings install dt~yargs --global --save

.ts fichiers

Ajoutez ceci aux fichiers .ts :

import { argv } from 'yargs';

...

  let debug: boolean = argv.debug;

Cela doit être fait dans chaque fichier .ts individuellement (même le fichier tools/tasks/project qui sont importés dans le gulpfile.ts/js ).

Exécuter

gulp build.dev --debug

Ou sous npm passer l'arg à gulp :

npm run build.dev -- --debug

2voto

HaNdTriX Points 4753

Passer des arguments depuis la ligne de commande

// npm install --save-dev gulp gulp-if gulp-uglify minimist

var gulp = require('gulp');
var gulpif = require('gulp-if');
var uglify = require('gulp-uglify');

var minimist = require('minimist');

var knownOptions = {
  string: 'env',
  default: { env: process.env.NODE_ENV || 'production' }
};

var options = minimist(process.argv.slice(2), knownOptions);

gulp.task('scripts', function() {
  return gulp.src('**/*.js')
    .pipe(gulpif(options.env === 'production', uglify())) // only minify in production
    .pipe(gulp.dest('dist'));
});

Puis lancez gulp avec :

$ gulp scripts --env development

Source :

2voto

var isProduction = (process.argv.indexOf("production")>-1);

CLI gulp production appelle ma tâche de production et met un drapeau pour toutes les conditionnelles.

1voto

Nous voulions passer un fichier de configuration différent pour différents environnements -- un pour production , dev y tests . Voici le code dans le fichier gulp :

//passing in flag to gulp to set environment
//var env = gutil.env.env;

if (typeof gutil.env.env === 'string') {
  process.env.NODE_ENV = gutil.env.env;
}

Voici le code dans le fichier app.js :

  if(env === 'testing'){
      var Config = require('./config.testing.js');
      var Api = require('./api/testing.js')(Config.web);
    }
    else if(env === 'dev'){
       Config = require('./config.dev.js');
        Api = require('./api/dev.js').Api;
    }
    else{
       Config = require('./config.production.js');
       Api = require('./api/production.js')(Config.web);
    }

Et ensuite pour l'exécuter gulp --env=testing

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X