2015-03-10 8 views
8

Abbiamo un sacco di applicazioni che condividono la logica comune di gulp, quindi abbiamo creato un plugin per il gulp che contiene un sacco di attività personalizzate.Come correggere l'errore "L'attività non è nel tuo gulpfile" quando si utilizza il collegamento npm?

Tuttavia vorremmo evitare di installare gulp + il nostro plugin (insieme a metà di internet) per ciascuna delle applicazioni che sviluppiamo.

Idealmente, mi piacerebbe fare:

npm install -g gulp 
npm install -g <our gulp plugin> 

Poi per ogni app, avremmo semplicemente dobbiamo fare:

npm link gulp 
npm link <our gulp plugin> 

Anche se questo funziona, il problema è sorso non è più riconosce uno qualsiasi dei nostri compiti su Gulp personalizzati. Qualsiasi comando gulp corro risultati in:

[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 

I compiti 'dev' è nel mio plug sorso, perché non è vero trovando? I miei gulpfile.js ha solo questo:

var gulp = require('gulp'); 
var mygulpplugin = require('mygulpplugin'); 

L'esatto stesso processo funziona quando gulp + il plugin è installato localmente. Qualche idea, perché?

+0

Potete mostrare come viene definito il dev' task '? –

+0

Ad esempio: gulp.task ('dev', ['clean'], function() { runSequence ('bower', 'jsBuildDev', 'buildCSS', 'indexBuildDev'); }); – zedix

risposta

5

Capito. Aggiunta la seguente riga in fondo del mio modulo:

module.exports = gulp; 

E il mio gulpfile in ogni modulo è simile al seguente:

var gulp = require('gulp'); 
var mygulpplugin = require('mygulpplugin'); 
gulp.tasks = mygulpplugin.tasks; 
+0

È un refuso vero? module.exports = gulp. –

+0

No, non è un errore di battitura. – zedix

+0

Penso che @WilliamLepinski significasse che dovresti correggere '.' in'; '. –

1

alternativa alla risposta accettata, è possibile farlo nel modo che era popolare in tempi grugnito, in cui inietta sorso al plugin:

in plugin: avvolgere il tutto con:

module.exports = function(gulp) { 
    gulp.task('foo', function() { 
     ... 
    }) 
    ... 
} 

e rimuovere require('gulp') dal file del plugin.

In gulpfile che dipende plug poi fai:

var gulp = require('gulp'); 
require('my-gulp-plugin')(gulp) 

In questo modo

  • è possibile avere più plug-in nella gulpfile principale, perché non ignorare gulp.tasks.
  • plugin non devono dichiarare gulp un package.json dipendenze in ciascuno dei plugin (meno lavoro per npm install)
Problemi correlati