web-dev-qa-db-ja.com

npmを介したgulpタスクの自動実行

私は通常、npmを介してgulpを実行します私のpackage.jsonで

"scripts": {
    "test": "gulp test",
    "minify": "gulp minify"
}

その後、次のようなコマンドを実行できます

npm run minify

どちらでも構いませんが、gulpfileに新しいタスクを追加するたびに、scriptsセクションの下のpackage.jsonにそれらを追加する必要があります。

理由pathにnpmのみをグローバルにインストールするので、他のすべてのモジュールがpathを汚染しないため、npmを介して実行する必要があります。スクリプト

35
Howard

あなたのために御Have走を得ましたか:私は先に行き、これを処理するためにあなたに簡単なnpmモジュールを作りました。

gulp-npm-script-sync

その要点は次のとおりです。

  var file = fs.readFileSync(config.path || 'package.json', 'utf-8');
  var pkg = JSON.parse(file);
  var tasks = gulp.tasks;

  pkg.scripts = pkg.scripts || {};

  Object.keys(tasks).forEach(function (t) {
    pkg.scripts[t] = 'gulp '+tasks[t].name;
  });

完全なソース は、同じインデントとものでpackage.jsonを書き戻すようなことをします。

ええ、先に進みます:npm install --save-dev gulp-npm-script-sync

これをgulpfileに貼り付けます:

var gulp = require('gulp');
var sync = require('gulp-npm-script-sync');

// your gulpfile contents

sync(gulp);

新しいタスクでgulpfileを更新するたびに、package.jsonが更新されます。

Gulpタスク内にスローすることもできます:

gulp.task('sync', function () {
  sync(gulp);
}
30
Austin Pray

ブライアンブレナンは、 素晴らしい提案./node_modules/.bin変数に$PATHを追加しました。 プロジェクトのトップディレクトリにいる限り、ローカルにインストールされたユーティリティを実行できます。

ソース: Keeping clean

パッケージを簡単に呼び出すことができるように、パッケージをグローバルにインストールする必要はありません。上記のパスはprependedであることを忘れないでください。


または、バージョン2.0.0以降、npmはrunコマンドに追加のパラメーターを渡す機能を提供します。これらの引数は、単にスクリプトコマンドに追加されます。

あなたの場合、package.jsonからの次のスクリプト:

"scripts": {
  "gulp": "gulp"
},

npm run gulp -- test、またはnpm run gulp -- minifyなどとして呼び出すことができます。

26
Roman Boiko