Перш ніж зробити невеликий випуск та позначити його, я хотів би оновити package.json, щоб відобразити нову версію програми.
Чи є спосіб редагувати файл package.json
автоматично?
Чи використовуєте git pre-release hook
допомогу?
Перш ніж зробити невеликий випуск та позначити його, я хотів би оновити package.json, щоб відобразити нову версію програми.
Чи є спосіб редагувати файл package.json
автоматично?
Чи використовуєте git pre-release hook
допомогу?
Відповіді:
npm version
це, мабуть, правильна відповідь. Просто, щоб дати альтернативу, я рекомендую грухнути . Його підтримує один із хлопців з angular.js.
Використання:
grunt bump
>> Version bumped to 0.0.2
grunt bump:patch
>> Version bumped to 0.0.3
grunt bump:minor
>> Version bumped to 0.1.0
grunt bump
>> Version bumped to 0.1.1
grunt bump:major
>> Version bumped to 1.0.0
Якщо ви все одно використовуєте грунт, це може бути найпростішим рішенням.
npm version
?
npm --no-git-tag-version version patch
.
Правильна відповідь
Для цього просто npm version patch
=)
Моя стара відповідь
pre-release
Спочатку немає гачка в git
. Принаймні, man githooks
не показує.
Наприклад, якщо ви використовуєте git-extra
( https://github.com/visionmedia/git-extras ), ви можете використовувати pre-release
гак, який реалізується ним, як це можна побачити на https://github.com/visionmedia/ git-extras / blob / master / bin / git-release . Це потрібен лише .git/hook/pre-release.sh
виконуваний файл, який редагує ваш package.json
файл. Здійснення, натискання та позначення здійснюватиметься git release
командою.
Якщо ви не використовуєте жодного розширення для git
, ви можете написати скрипт оболонки (я його назву git-release.sh
), а потім ви можете його псевдонімувати git release
з чимось на зразок:
git config --global alias.release '!sh path/to/pre-release.sh $1'
Ви можете, ніж використовувати, git release 0.4
який буде виконуватися path/to/pre-release.sh 0.4
. Ваш сценарій може редагувати package.json
, створювати тег і пересилати його на сервер.
git release
не оновлює package.json відповідно ... github.com/visionmedia/git-extras/isissue/150 : D
.git/hooks/pre-release.sh
що містить: echo -e "{\n\"version\": "$1"\n}" > package.json
і спробуйте використовуватиgit release $version
Це те, що я зазвичай роблю зі своїми проектами:
npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish
Перший рядок, npm version patch
збільшить версію патча на 1 (xx1 до xx2) у package.json
. Потім ви додаєте всі файли, включаючи, package.json
які в цей момент були змінені. Потім, звичайний git commit
і git push
, і, нарешті, npm publish
опублікувати модуль.
Сподіваюся, це має сенс ...
Merc.
npm version patch
чи виконує сама себе; однак, щоб натиснути тег на github, я думаю, вам також потрібно git push --tags
.
npm version patch
номер версії та негайно
npm version patch
нічого не робить для мене.
npm version
.
Надати більш сучасний підхід.
package.json
"scripts": {
"eslint": "eslint index.js",
"pretest": "npm install",
"test": "npm run eslint",
"preversion": "npm run test",
"version": "",
"postversion": "git push && git push --tags && npm publish"
}
Потім ви запускаєте його:
npm version minor --force -m "Some message to commit"
Що:
... запустити тести ...
перейдіть package.json
на наступну другорядну версію (наприклад: 1.8.1 на 1.9.0)
натисніть на зміни
створити новий реліз тегів git та
опублікуйте пакет npm.
--force
це показати, хто є начальником! Жарти вбік див. Https://github.com/npm/npm/isissue/8620
"deploy-minor": "npm version minor --force -m \"version %s\""
все, що вам потрібно запам’ятати: npm run deploy-minor
:)
Як додаток до цього npm version
ви можете використовувати --no-git-tag-version
прапор, якщо ви хочете, щоб збільшитись за версію, але немає тегу чи новий комітет:
npm --no-git-tag-version version patch
Якщо ви використовуєте пряжу, яку можете використовувати
yarn version --patch
Це збільшить package.json
версію за допомогою виправлення (0.0.x)
, фіксації та тегів у форматіv0.0.0
Так само ви можете зіткнути незначну чи основну версію, використовуючи --minor
або--major
Під час натискання на git переконайтесь, що ви також натискаєте теги за допомогою --follow-tags
git push --follow-tags
Ви також можете створити для нього сценарій
"release-it": "yarn version --patch && git push --follow-tags"
Просто запустіть його, ввівши yarn release-it
Я використовую husky та git-branch-is :
Станом на хаскі v1 +:
// package.json
{
"husky": {
"hooks": {
"post-merge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
}
}
}
До хаскі V1:
"scripts": {
...
"postmerge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
...
},
Детальніше про версію npm
Webpack або Vue.js
Якщо ви використовуєте webpack або Vue.js, ви можете відобразити це в інтерфейсі користування версією автоматичного введення - плагіном Webpack
NUXT
В nuxt.config.js
:
var WebpackAutoInject = require('webpack-auto-inject-version');
module.exports = {
build: {
plugins: [
new WebpackAutoInject({
// options
// example:
components: {
InjectAsComment: false
},
}),
]
},
}
Всередині вашого, template
наприклад, у нижньому колонтитулі:
<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
postmerge
, але зараз він знаходиться post-merge
всередині husky: {hooks:{}}
конфігурації. Яке питання у вас є git-branch-is
?
Я хочу додати трохи ясності відповідям на це запитання.
Навіть думав, що тут є відповіді, які правильно вирішують проблему та пропонують рішення, вони не є правильними. Правильна відповідь на це питання - використовуватиnpm version
Чи є спосіб редагувати файл package.json автоматично?
Так, те, що ви можете зробити, щоб це сталося, це запустити npm version
команду, коли це потрібно, ви можете прочитати більше про це тут, npm версія , але базове використання було б, npm version patch
і це додало б 3-значний порядок у вашій package.json
версії (1.0. X )
Чи допоможе використання гака, який попередньо звільнив git?
Ви можете налаштувати запуск npm version
команди на гачок перед випуском, як вам потрібно, але це залежить від того, що вам потрібно чи ні в вашому CD / CI трубі, але без npm version
команди git pre-release
гак нічого не може зробити "легко" зpackage.json
Причиною npm version
правильної відповіді є наступна:
package.json
він використовує, npm
якщо він використовує, npm
він має доступ до npm scripts
.npm scripts
нього, він має доступ до npm version
команди.Інші відповіді, в яких пропонуються інші інструменти, є невірними.
gulp-bump
працює, але вимагає іншого додаткового пакету, який може створювати проблеми в довгостроковій перспективі (пункт 3 моєї відповіді)
grunt-bump
працює, але вимагає іншого додаткового пакету, який може створювати проблеми в довгостроковій перспективі (пункт 3 моєї відповіді)
Спочатку потрібно зрозуміти правила оновлення номера версії. Більше про семантичну версію ви можете прочитати тут.
Кожна версія матиме версію xyz, де вона визначається для різних цілей, як показано нижче.
Для запуску сценаріїв ви можете визначити його у своєму package.json.
"script": {
"buildmajor": "npm version major && ng build --prod",
"buildminor": "npm version minor && ng build --prod",
"buildpatch": "npm version patch && ng build --prod"
}
У своєму терміналі вам просто потрібно npm запустити відповідно до ваших потреб
npm run buildpatch
Якщо запустити його в git repo, типова версія git-tag-версія є правдою, і якщо ви цього не бажаєте, ви можете додати команду нижче у свої сценарії:
--no-git-tag-version
наприклад: "npm --no-git-tag-version version major && ng build --prod"
Я створив інструмент, який може здійснити автоматичну семантичну версію на основі тегів у повідомленнях комітів, відомих як типи змін. Це уважно дотримується Конвенції про повідомлення про кутовий комітет разом із специфікацією семантичного версії.
Ви можете використовувати цей інструмент для автоматичної зміни версії в package.json за допомогою npm CLI (це описано тут ).
Крім того, він може створити журнал змін із цих комітетів, а також має меню (з перевірки орфографії повідомлень про фіксацію) для створення комісій на основі типу змін. Я настійно рекомендую перевірити його та прочитати документи, щоб побачити все, що можна зробити з ним.
Я написав інструмент, оскільки не міг знайти нічого, що відповідало б моїм потребам для мого CICD Pipeline для автоматизації семантичної версії. Я вважаю за краще зосередитись на тому, що є фактичними змінами, ніж те, якою має бути версія, і саме там мій інструмент економить день.
Для отримання додаткової інформації про обґрунтування цього інструменту, будь ласка, дивіться це .