Help us understand the problem. What is going on with this article?

gulp(npm)に引数を渡したい!

More than 3 years have passed since last update.

ファイルを指定して、gulpを実行したい! 」となったので、
gulpでファイル名を引数でわたせばいいんじゃないの?と思い、対応していったんですがその時のメモです。

gulpに引数を渡す

基本的に引数は渡せなそうだったので、
minimistを使用することにしました。
こちらは、引数をオブジェクトとして渡してくれる機能になります。

minimistの使い方

gulpfile.js
var gulp = require('gulp'),
    minimist = require('minimist');
var argv = minimist(process.argv.slice(2));
gulp.task('check', function() {
  console.dir(argv);
});

確認方法

gulp
$ gulp check -f HOGE

これで引数を受け取ることができました。

npm run script に引数を渡す

npmは標準で「--」の後ろに引数を渡せます
https://docs.npmjs.com/cli/run-script
こちらを参考に、以下のように修正して $ npm run します。

package.json
// 省略
"scripts": {
  "check": "bundle exec gulp check -f"
},
// 省略
gulpfile.js
var gulp = require('gulp'),
    minimist = require('minimist');
var argv = minimist(process.argv.slice(2));
gulp.task('check', function() {
  console.dir(argv);
});
$ npm run check -- HOGE // 「HOGE」を渡します
[19:15:10] Starting 'check'...
{ _: [ 'check' ], f: 'HOGE' }
[19:15:10] Finished 'check' after 2.27 ms

fにHOGEが入っているのは、
package.jsonのscriptsにあるcheck箇所に固定で
"bundle exec gulp check -f"
と記述してあるからです。

応用

$ npm run check -- target$ gulp check -f target
を実行したいので下記のように編集していきます。

gulpfile.js
var gulp = require('gulp'),
    process = require('process'), 
    minimist = require('minimist');
var argv = minimist(process.argv.slice(2));

gulp.task('check', function() {
  // argv['f']の値がないときはboolean型のtrueを返すので文字列(引数があったら)だったら処理をすすめるようにします。
  if(argv['f'] === true) { 
    console.log('$ npm run watch -- [filename] // 拡張子無し');
    process.exit(0);
  }
  gulp.watch(['sass/' + argv['f'] + '.scss'], ['sass']);
});
// sassタスクは別途書く
$ npm run check -- style // style.scssを、sassタスク実行します。

これで引数に渡した値によって、タスク内で処理する対象や処理を変更することができました!

bengo4
「専門家をもっと身近に」を理念として、人々と専門家をつなぐポータルサイト「弁護士ドットコム」「弁護士ドットコムニュース」「税理士ドットコム」を提供。
https://corporate.bengo4.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした