2015-03-10 5 views
8

Mamy wiele aplikacji dzielących wspólną logikę, więc stworzyliśmy wtyczkę do gulp zawierającą kilka niestandardowych zadań.Jak naprawić błąd "Zadanie nie jest w pliku gulp" podczas korzystania z łącza npm?

Jednakże chcielibyśmy uniknąć instalacji gulp + naszej wtyczki (wraz z połową Internetu) dla każdej z rozwijanych przez nas aplikacji.

Idealnie chciałabym zrobić:

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

następnie dla każdej aplikacji, którą po prostu trzeba zrobić:

npm link gulp 
npm link <our gulp plugin> 

Chociaż to działa, problem jest już łyk rozpoznaje każde z naszych niestandardowych zadań. Każde polecenie gulp, które uruchomię, powoduje:

[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 

"Zadania programisty" znajdują się w mojej wtyczce, dlaczego jej nie znajduje? Mój gulpfile.js ma tylko:

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

Dokładnie ten sam proces działa, gdy gulp + wtyczka jest zainstalowana lokalnie. Jakieś pomysły, dlaczego?

+0

można pokazać, jak 'dev' zadaniem jest zdefiniowane? –

+0

Takich jak: gulp.task ("dev", ['clean'], function() { runSequence ("altana", "jsBuildDev", "buildCSS", "indexBuildDev"); }); – zedix

Odpowiedz

5

Wyliczyłem to. Dodano następującą linię w dolnej części mojego modułu:

module.exports = gulp; 

A moja gulpfile w każdym module wygląda następująco:

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

Czy to prawda, prawda? module.exports = gulp. –

+0

Nie, to nie jest literówka. – zedix

+0

Myślę, że @WilliamLepinski oznaczało, że powinieneś poprawić '.' na'; '. –

1

Alternatywnie do zaakceptowanej odpowiedzi, można to zrobić w sposób, który był popularny Grunt w czasach, gdzie wstrzyknąć łyk do wtyczki:

w plugin: zawinąć wszystko z:

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

i usuń require('gulp') z pliku wtyczki.

W gulpfile który zależy od wtyczki wtedy zrobić:

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

tamtędy

  • można mieć wiele wtyczek w głównym gulpfile, ponieważ nie zastępują gulp.tasks.
  • wtyczki nie trzeba deklarować gulp zależność package.json w każdej z wtyczek (mniej pracy dla npm install)