web-dev-qa-db-fra.com

Comment corriger l'erreur "La tâche n'est pas dans votre gulpfile" lors de l'utilisation du lien npm?

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?

12
zedix

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;
7
zedix

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

  • vous pouvez avoir plusieurs plugins dans le gulpfile principal, car vous ne remplacez pas gulp.tasks.
  • les plugins n'ont pas à déclarer gulp une dépendance package.json dans chacun des plugins (moins de travail pour npm install)
2
jakub.g