У меня есть пакет npm, который управляет моим репозиторием github и имеет сценарии, которые создают мой публикуемый пакет npm. Из-за характера пакета опубликованный пакет npm (дистрибутив) не может соответствовать пакету моего репозитория (источник). Я приближаюсь к разработке через тестирование и непрерывной интеграции, но учусь этому шаг за шагом. Вот текущий поток, и пока он работает безупречно:
Из командной строки:
> npm run patch
- runs
npm version patch
- This invokes source's
preversion
,- cleans the distro:
npm run clean
- runs the tests:
npm test
- This invokes
pretest
,npm run build
- Runs distro's tests
- Failure: Errors and process ends
- Успешно: ветвь завершена,
- This invokes
- cleans the distro:
- invokes the source's
postversion
:git push
all commits and tags
- This invokes source's
- runs distro's
npm version patch
- invokes distro's
postversion
npm publish
- invokes distro's
(Источник) package.json
{
...,
"scripts": {
"patch": "npm version patch && cd dist && npm version patch",
"minor": "npm version minor && cd dist && npm version minor",
"major": "npm version major && cd dist && npm version major",
"preversion": "npm run clean && npm test",
"clean": /* clean commands */,
"pretest": "npm run build",
"test": "cd dist && npm test",
"postversion": "git push origin --all && git push origin --tags"
},
...
}
(Дистр) package.json
{
...,
"scripts": {
"test": /* test commands */,
"postversion": "npm publish"
},
...
}
Хотелось бы более простой интерфейс. Как видите, мне нужно npm run <major|minor|patch>
. Вместо этого я хотел бы npm run dist
с аргументом командной строки, переданным обеим версиям npm.
Пример:
> npm run dist patch
--------------------
<<< npm version patch
<<< cd dist && npm version patch
> npm run dist major
--------------------
<<< npm version major
<<< cd dist && npm version major
Можно ли передавать аргументы командной строки вниз по дереву? Или, что еще лучше, могу ли я распределить аргумент командной строки между командами в одной записи сценария? Я могу легко добавить запись в scripts
, которая принимает аргумент командной строки, но, похоже, не могу понять, как использовать этот аргумент более одного раза, написав отдельный скрипт .js
.
patch
,minor
иmajor
можно заменить на тот, который использует функцию bash, например."dist": "func () { arg=${1:-patch}; npm version \"$arg\" && cd dist && npm version \"$arg\"; }; func"
. Через интерфейс командной строки запустите либо: 1)$ npm run dist
(примечание: когда аргумент не передается, частьarg=${1:-patch};
в телеfunc
по умолчанию устанавливает аргумент равнымpatch
). 2) Или запустите:$ npm run dist <semver>
, при этом<semver>
следует заменить на любой;patch
,minor
илиmajor
. Windowscmd.exe
явно захлебнется функцией bash. Мои ответы... - person RobC   schedule 04.02.2019npm run
с помощью скрипта node.js. Однако в вашем сценарии вы также используете хукиpre
иpost
… - person RobC   schedule 04.02.2019npm run
черезchild_process.exec()
node.js они выполняются в дочернем процессе, поэтому ваши хукиpre
иpost
будут игнорироваться. По сути, для x-платформы вам нужно будет выложить cmds, чтобы разрешить аргументы в середине npm-скрипта, а также вызвать хукиpre
иpost
из скрипта node.js. Хотя да, вы можете передавать аргументы вниз по дереву в соответствии с этим script#answer-40508801">ответ, ваша основная проблема заключается в передаче аргументов в середину скрипта. - person RobC   schedule 04.02.2019child_process
? Похоже, если я найду решение на чистом npm (что звучит маловероятно), мне, возможно, придется ответить на свой вопрос... - person Fuzzical Logic   schedule 04.02.2019const arg = process.argv[2]';
, а затем обрабатывающем ваш cmd с помощьюrequire('child_process').execSync(`npm version ${arg} && cd dist && npm version ${arg}`, { stdio:[0, 1, 2] });
, ваши сценарииpreversion
иpostversion
не запускались (однако они выполнялись с использованием функции bash, т.е. когда это один и тот же процесс, а не ребенок). Думаю, вам также нужно будет вызывать хуки, например.execSync(`npm run preversion && npm version ${arg} && npm run postversion && cd dist && npm version ${arg}`)
. Может стоит изучить. - person RobC   schedule 04.02.2019