web-dev-qa-db-fra.com

Exécuter automatiquement des tâches de gulp via npm

Je lance généralement gulp via npm, par ex. dans mon package.json

"scripts": {
    "test": "gulp test",
    "minify": "gulp minify"
}

Ensuite, je peux exécuter une commande telle que

npm run minify

Ce qui est correct, mais chaque fois que j'ai de nouvelles tâches dans mon gulpfile, je dois les ajouter au package.json dans la section des scripts, y a-t-il une meilleure façon de le faire?

Reason: J'installe uniquement npm globalement sur mon path pour que tous les autres modules ne polluent pas mon path, donc je dois les exécuter via npm scripts

35
Howard

Ai-je un régal pour vous: je suis allé de l'avant et vous ai fait un module npm simple pour gérer cela.

gulp-npm-script-sync

Voici l'essentiel:

  var file = fs.readFileSync(config.path || 'package.json', 'utf-8');
  var pkg = JSON.parse(file);
  var tasks = gulp.tasks;

  pkg.scripts = pkg.scripts || {};

  Object.keys(tasks).forEach(function (t) {
    pkg.scripts[t] = 'gulp '+tasks[t].name;
  });

Le source complète fait des trucs comme réécrire le package.json avec la même indentation et les mêmes trucs.

Alors, allez-y: npm install --save-dev gulp-npm-script-sync

Collez ceci dans votre gulpfile:

var gulp = require('gulp');
var sync = require('gulp-npm-script-sync');

// your gulpfile contents

sync(gulp);

Chaque fois que vous mettez à jour votre gulpfile avec une nouvelle tâche, il mettra à jour votre package.json.

Vous pouvez même le jeter dans une tâche de gorgée:

gulp.task('sync', function () {
  sync(gulp);
}
30
Austin Pray

Brian Brennan a donné ne suggestion fantastique : ajouter ./node_modules/.bin à votre $PATH variable. Ensuite, vous pouvez exécuter les utilitaires installés localement tant que vous êtes dans le répertoire supérieur d'un projet.

Source: Garder propre .

Pas besoin d'installer un package globalement pour pouvoir l'invoquer facilement. N'oubliez pas que le chemin ci-dessus doit être ajouté.


Alternativement, depuis la version 2.0.0, npm permet de transmettre des paramètres supplémentaires à nos commandes d'exécution. Ces arguments seront simplement ajoutés à votre commande de script.

Dans votre cas, le script suivant de votre package.json:

"scripts": {
  "gulp": "gulp"
},

peut être invoqué comme npm run gulp -- test, ou npm run gulp -- minify, etc.

26
Roman Boiko