web-dev-qa-db-ja.com

npmリンクを使用しているときに「タスクがgulpfileにありません」エラーを修正するにはどうすればよいですか?

一般的なgulpロジックを共有する多数のアプリケーションがあるため、多数のカスタムタスクを含むgulpプラグインを作成しました。

ただし、開発するアプリケーションごとにgulp + ourプラグイン(インターネットの半分)をインストールすることは避けたいと思います。

理想的には、私はしたい:

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

次に、アプリごとに、次のことを行うだけです。

npm link gulp
npm link <our gulp plugin>

これは機能しますが、問題はgulpがカスタムgulpタスクを認識しなくなることです。私が実行するgulpコマンドの結果:

[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

「dev」タスクはgulpプラグインにありますが、なぜそれが見つからないのですか?私のgulpfile.jsにはこれしかありません:

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

Gulp +プラグインがローカルにインストールされている場合、まったく同じプロセスが機能します。なぜアイデアがありますか?

12
zedix

理解した。モジュールの下部に次の行を追加しました。

module.exports = gulp;

そして、各モジュールの私のgulpfileは次のようになります。

var gulp = require('gulp'); 
var mygulpplugin = require('mygulpplugin');
gulp.tasks = mygulpplugin.tasks;
7
zedix

受け入れられた答えの代わりに、あなたはプラグインにgulpを注入するうなり声の時代に一般的だった方法でそれを行うことができます:

プラグイン:ですべてをラップします:

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

プラグインのファイルからrequire('gulp')を削除します。

プラグインに依存するgulpfileでは次のようにします:

_var gulp = require('gulp');
require('my-gulp-plugin')(gulp)
_

そのように

  • _gulp.tasks_をオーバーライドしないため、メインのgulpfileに複数のプラグインを含めることができます。
  • プラグインは、各プラグインでgulpを_package.json_依存関係を宣言する必要はありません(_npm install_の作業は少なくなります)
2
jakub.g