Работает на * платформах nix
На * nix платформа npm по умолчанию использует sh
для выполнения сценария (ов) npm.В этом сценарии вы можете просто использовать функцию оболочки и ссылаться на аргумент git-сообщения, передаваемый через CLI, используя позиционный параметр $1
.
Ваш скрипт npm будет переопределен следующим образом:
"scripts": {
"build": "...",
"buildAndCommit": "func() { npm run build && git add . && git commit -m \"BUILD - $1\"; }; func"
}
Кроссплатформенность
К сожалению, через Windows Powershell решение не так просто и кратко.
При использовании Powershell npm по умолчанию использует cmd
для выполнения сценария (ов) npm.Аналогично, npm по умолчанию использует cmd
и для других консолей Windows, таких как Командная строка .
Один из способов выполнить ваше требование - вызвать файл node.js через скрипт npm.Ниже приведены два разных метода, которые по сути одинаковы.Любой из них будет успешно запущен кроссплатформенно (в вашем случае через Powershell).
Метод A - Использование отдельного сценария node.js
Создатьследующий скрипт node.jsДавайте назовем файл script.js и сохраним его в корне каталога проекта, то есть в том же каталоге, где находится package.json .
script.js
const execSync = require('child_process').execSync;
const mssg = 'BUILD - ' + process.argv[2];
execSync('npm run build && git add . && git commit -m \"' + mssg + '\"', { stdio:[0, 1, 2] });
Объяснение
Встроенный в node.js process.argv
захватываетаргумент в индексе два, то есть сообщение git commit, которое было предоставлено через CLI.Сообщение git commit объединяется с подстрокой BUILD -
, чтобы сформировать желаемое сообщение commit.Результирующая строка присваивается переменной mssg
.
Затем мы используем встроенный в node.js execSync()
для выполнения заданного сценария npm.Как видите, значение переменной mssg
используется в качестве сообщения git commit.
Параметр stdio
используется для обеспечения правильногоКонфигурация каналов, то есть stdin
, stdout
, 'stderr', устанавливаются между родительским и дочерним процессами.
Определите свой скрипт npm с именемbuildAndCommit
следующим образом:
package.json
"scripts": {
"build": "...",
"buildAndCommit": "node script"
}
Выше node
вызывает script.js
.
Метод B - встроить скрипт node.js в скрипт npm
В качестве альтернативы вышеупомянутый скрипт node.js (т. Е. script.js ) может быть встроен ввместо этого ваш скрипт npm - поэтому отрицается использование отдельного .js
файла.
package.json
"scripts": {
"build": "...",
"buildAndCommit": "node -e \"const mssg = 'BUILD - ' + process.argv[1]; require('child_process').execSync('npm run build && git add . && git commit -m \\\"' + mssg + '\\\"', { stdio:[0, 1, 2] })\""
}
При этом используется тот же код из Метод A , хотя и слегка переработанный.Существенные различия:
- Параметр командной строки nodejs
-e
используется для оценки встроенного JavaScript. process.argv
на этот раз будет захватыватьаргумент, т. е. сообщение git commit, по индексу 1 в массиве аргументов. - Необходимо дополнительное экранирование двойных кавычек, т. е.
\\\"
Запуск сценария npm
Использование Метод A или Метод B Запустите команду через CLI по желанию: Например:
$ npm run buildAndCommit -- "commit for a new build"
Это приведет к появлению следующего сообщения git commit:
BUILD - commit for a new build