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 書きたくない。