npm scripts のコマンドライン引数は sh で展開される
package.jsonに
"scripts": { "lint": "eslint src/**/*.{js,jsx}" }
と書いた場合、npm run lint
やyarn run lint
は、このコマンドをシェルを通して実行する。このときデフォルトではsh
が使われる。例えばmacOSだとsh
はbash
なので、bash
がsrc/**/*.{js,jsx}
を展開することになる。しかしbash
は**/*
の展開に対応してないので思ったとおりにうごかない。
$ tree . └ src ├ a │ └ bar.js └── foo.js $ zsh -c 'echo src/**/*.js' src/a/bar.js src/foo.js $ bash -c 'echo src/**/*.js' src/a/bar.js
この場合はeslintがglobを展開してくれるので、クオートしてそのまま渡してあげるのが正解。
"scripts": { "lint": "eslint 'src/**/*.{js,jsx}'" }
ちなみに npm config でシェルを指定できるらしいがシェルに依存したスクリプトなんぞ npm scripts 書きたくない。