Кроссплатформенная совместимость не может быть реализована с помощью команды оболочки date
, которая доступна на * nix платформах.Это связано с тем, что команда Windows / cmd.exe DATE
ведет себя по-разному.Различия:
- Команда * nix
date
выводит дату / время. - Команда Windows / cmd.exe
DATE
запрашиваетпользователь может установить системную дату / время.
Также подстановка команд , то есть часть $(...)
- это функция bash, доступная в большинстве * nix-оболочек - она завершится с ошибкой через Windows cmd.exe .
Для кроссплатформенного решения (т.е. успешно работающего в Windows, Linux и macOS ...) рассмотрите следующий подход:
- Использование сценария nodejs для shell-out ваших
cd
и git
команд с использованием встроенных execSync()
. - Получите дату, используя пакет moment или, альтернативно, используйте объект JavaScript
Date()
, аналогичный этому ответу вместо. - Вызовите скрипт nodejs из раздела
scripts
вашего package.json
Решение:
Существует несколько различныхМожно подойти к этому, как описано в следующих двух подразделах:
- Использование внешнего файла nodejs (.js)
- Вставка вашего JavaScript в package.json .
Примечание: оба подхода эффективно дают один и тот же желаемый результат.
Использование внешнего файла nodejs (.js)
Далее используется moment
для получения даты.Чтобы установить это, запустите следующую команду в каталоге вашего проекта:
npm i -D moment
Создайте скрипт nodejs следующим образом, назовите файл deploy.js и сохраните егов корневом каталоге вашего проекта, то есть в том же каталоге, где в данный момент находится package.json ::
deploy.js
const moment = require('moment');
const execSync = require('child_process').execSync;
const dateTime = moment().format('MM/DD/YYYY HH:mm:ss');
execSync(`cd dist && git add . && git commit -m \"Release at ${dateTime}\" && git push`, { stdio: [0, 1, 2]} );
В разделе scripts
вашего package.json замените текущий deploy
скрипт следующим:
package.json
"scripts": {
"deploy": "node deploy"
}
Вызовите скрипт npm deploy
в обычном режиме, запустив через CLI следующее:
npm run deploy
Объяснение:
- В deploy.js нам требуется пакет
moment
и встроенный в nodejs execSync()
. - .текущую дату / время мы вызываем
moment()
и вызываем его метод format()
, чтобы соответствовать вашему заданному форматированию, т.е. MM/DD/YYYY HH:mm:ss
. - Мы тогда shell-out ваши
cd
и git
сс помощью execSync
.Ссылка на дату / время предоставляется в части сообщения git
с использованием литералов шаблона , то есть ${dateTime}
- Опция
options.stdio
конфигурирует каналымежду родительским и дочерним процессами - [0, 1, 2]
эффективно наследует stdin
, stdout
и stderr
.
Включение вашего JavaScript в package.json.
В качестве альтернативы,вы можете встроить свой код nodejs / JavaScript в раздел scripts
вашего package.json .
в разделе сценариев вашего package.json замените ваш текущий сценарий deploy
следующим:
package.json
"scripts": {
"deploy": "node -e \"const dateTime = require('moment')().format('MM/DD/YYYY HH:mm:ss'); require('child_process').execSync(`cd dist && git add . && git commit -m \"Release at ${dateTime}\" && git push`, { stdio: [0, 1, 2]} );\""
}
Объяснение:
- Это практически то же самое, что и вышеупомянутое решение, в котором использовался отдельный файл
.js
(хотя и слегка переработанный).Использование отдельного сценария / файла nodejs теперь избыточно. - Параметр командной строки nodejs
-e
используется для оценки встроенного JavaScript.