Я пытаюсь создать одну команду сценария NPM, которая может:
- запустить Prettier для всех исходных файлов в проекте;или
- запускать Prettier только для файлов, заданных в качестве аргумента.
То есть я хочу:
npm run prettier
для выполнения prettier --write '**/*.{js,ts}'
npm run prettier foo.ts
для выполнения prettier --write foo.ts
Я понял, как использовать для этого интерполяцию оболочки, т.е.
sh -c 'echo --write "${@:-default}"'
выходные данныеdefault
и
sh -c 'echo --write "${@:-default}"' -- value
выводит value
, что кажется довольно близким.
Но когда я пытаюсь определить скрипт NPM, например:
"scripts": {
"prettier": "sh -c 'exec prettier --write \"${@:-'**/*.{js,ts}'}\"' --"
}
и запустите его с npm run prettier foo.js
, оно взорвется с помощью:
[error] No matching files. Patterns tried: babel.config.js} !**/node_modules/** ...
То есть, к имени файла, который я хочу, по неизвестной причине добавляется блуждающая закрывающая фигурная скобка.
Теперь я знаю, что могу обойти это, просто используя два сценария для этих двух случаев, мне больше интересно узнать, что здесь происходит, черт возьми.