Nous avons un tas d'applications partageant la logique gulp commune, nous avons donc créé un plugin gulp qui contient un tas de tâches personnalisées.
Cependant, nous aimerions éviter d'installer gulp + notre plugin (ainsi que la moitié d'Internet) pour chacune des applications que nous développons.
Idéalement, j'aimerais faire:
npm install -g gulp
npm install -g <our gulp plugin>
Ensuite, pour chaque application, nous aurions simplement à faire:
npm link gulp
npm link <our gulp plugin>
Bien que cela fonctionne, le problème est que gulp ne reconnaît plus aucune de nos tâches de gulp personnalisées. Toute commande gulp que j'exécute se traduit par:
[15:16:51] Using gulpfile /workspace/my-app/gulpfile.js
[15:16:51] Task 'dev' is not in your gulpfile
[15:16:51] Please check the documentation for proper gulpfile formatting
Les tâches 'dev' sont dans mon plugin gulp, pourquoi ne le trouve-t-il pas? Mon gulpfile.js n'a que ceci:
var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');
Le même processus fonctionne lorsque gulp + le plugin est installé localement. Des idées pourquoi?
Deviner. Ajout de la ligne suivante en bas de mon module:
module.exports = gulp;
Et mon gulpfile dans chaque module ressemble à ceci:
var gulp = require('gulp');
var mygulpplugin = require('mygulpplugin');
gulp.tasks = mygulpplugin.tasks;
Alternativement à la réponse acceptée, vous pouvez le faire de la manière qui était populaire dans les temps difficiles, où vous injectez de la gorgée au plugin:
Dans le plugin: tout envelopper avec:
module.exports = function(gulp) {
gulp.task('foo', function () {
...
})
...
}
et supprimez require('gulp')
du fichier du plugin.
Dans gulpfile qui dépend du plugin vous faites alors:
var gulp = require('gulp');
require('my-gulp-plugin')(gulp)
De cette façon
gulp.tasks
.gulp
une dépendance package.json
dans chacun des plugins (moins de travail pour npm install
)