Как создать сценарий NPM, который может принимать необязательный параметр со значением по умолчанию? - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь создать одну команду сценария 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/** ...

То есть, к имени файла, который я хочу, по неизвестной причине добавляется блуждающая закрывающая фигурная скобка.

Теперь я знаю, что могу обойти это, просто используя два сценария для этих двух случаев, мне больше интересно узнать, что здесь происходит, черт возьми.

...