Перш ніж зробити невеликий випуск та позначити його, я хотів би оновити 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 для автоматизації семантичної версії. Я вважаю за краще зосередитись на тому, що є фактичними змінами, ніж те, якою має бути версія, і саме там мій інструмент економить день.
Для отримання додаткової інформації про обґрунтування цього інструменту, будь ласка, дивіться це .