Как передать аргументы и использовать эти аргументы в качестве переменных в сценарии package.json?

"scripts": {
    "cr": "git commit -am ${message} && git pull origin master --rebase && git push --force",
}

Я пытаюсь понять, как запустить приведенное выше что-то вроде:

# yarn cr "commit message"

person antonpug    schedule 07.11.2019    source источник
comment
Похоже, что это будет лучше работать как псевдоним оболочки? Обязательно используйте --force-with-lease, чтобы избежать гонок.   -  person Ry-♦    schedule 07.11.2019
comment
Вы можете попробовать изменить весь файл package.json, чтобы заменить любую его часть. Сначала вам нужно проанализировать JSON, затем изменить соответствующее значение ключа, затем преобразовать полученный JSON в строку и сохранить его в файл.   -  person Arfeo    schedule 07.11.2019
comment
Должно быть простое решение, как мне кажется? И псевдоним оболочки будет работать, но я хочу, чтобы его можно было легко повторно использовать всем, кто сбрасывает проект.   -  person antonpug    schedule 07.11.2019


Ответы (2)


Да. вы можете сделать что-то вроде этого

"scripts": {
{
  "cr": "f(){ git commit -am $1;};f",

}
}

и yarn run cr -- 'commit message'

вы можете передать n аргументов, разделенных пробелом, и они могут быть доступны через $1, $2..

person NIsham Mahsin    schedule 07.11.2019
comment
Это не удастся в Windows, если npm использует оболочку по умолчанию cmd.exe. - person RobC; 09.11.2019
comment
это будет работать на unix. пожалуйста, используйте gitbash в окнах - person NIsham Mahsin; 10.11.2019

Шаблон sh -c 'shell_command' работает в *nix и Windows Powershell. Затем вы можете использовать $0, $1 и т. д. для доступа к аргументам командной строки. Итак, напишите это в своем package.json:

"scripts": {
    "cr": "sh -c 'git commit -am $0 && git pull origin master --rebase && git push --force'",
}

Теперь вы можете запустить эту команду в терминале:

yarn cr commit_message
person Abdollah    schedule 07.11.2019
comment
Это не удастся в Windows, если npm использует оболочку по умолчанию cmd.exe. - person RobC; 09.11.2019
comment
Спасибо за вашу точку зрения. Я протестировал его на Ubuntu и Windows Powershell, и он работал нормально. - person Abdollah; 09.11.2019
comment
Конечно, Ubuntu — это *nix, и в этом случае npm по умолчанию использует sh. Powershell обычно использует cmd по умолчанию. Состояние npm docs: По умолчанию в Unix-подобных системах это команда /bin/sh, в Windows это cmd.exe.. Для истинной кросс-платформенной совместимости вам потребуется оболочка из сценария node.js - например, см. Мой ответ здесь. - person RobC; 09.11.2019