Согласно этому ответу и этому комментарию, yarn run
поддерживает только передачу аргументов в конец скрипта, а не в середину.Это поведение аналогично npm run
.
Чтобы обойти это ограничение, вам необходимо поместить текущую условную логику в тело bash-функции .Например:
"scripts": {
"paramtest": "func () { if [ -z \"$1\" ]; then echo \"var is unset\"; else echo \"var is set to ${1}\"; fi ;}; func",
...
Теперь, когда вы передаете аргумент скрипту через CLI, он получает:
- Добавляется в конец скрипта
paramtest
, т.е. послеfunc
invocation. - Впоследствии передается в качестве аргумента самой функции
func
. - В теле функции
func
на первый параметр ссылаются с помощью $1
вtest и ${1}
в строке echo
.
Примечание: $1
в тесте заключено в двойные кавычки с пробелом в json, т.е. \"$1\"
Запуск сценария:
При передаче аргумента в ваш скрипт через CLI было бы безопаснее также включить --
между именем скрипта (т.е. paramtest
) и аргументом (foo
).Например:
yarn run paramtest -- foo
^^
Потому что, если ваш аргумент начинается с дефиса (как показано в следующей команде), он будет интерпретирован как опция:
yarn run paramtest -foo
^
и ваш скрипт напечатает:
var is unset
Однако при добавлении --
, как показано в следующем примере;
yarn run paramtest -- -foo
^^ ^
правильно печатает:
var is set to -foo