оновити версію package.json автоматично


183

Перш ніж зробити невеликий випуск та позначити його, я хотів би оновити package.json, щоб відобразити нову версію програми.

Чи є спосіб редагувати файл package.jsonавтоматично?

Чи використовуєте git pre-release hookдопомогу?


1
Чому б вам не створити скрипт оболонки, який редагує package.json, виконує компіляцію та не додає тег до цього?
gustavotkg

так, перед гаком перед випуском буде викликати цей сценарій правильно?
tUrG0n

Відповіді:


94

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

Якщо ви все одно використовуєте грунт, це може бути найпростішим рішенням.


12
А якщо ви використовуєте gulpjs : gulp-bump :)
GabLeRoux

Я зашифрував Vik для цього, який натрапляє на npm, Bower тощо ... одним махом: github.com/Wildhoney/Vik
Wildhoney

8
навіщо використовувати зовнішні бібліотеки, коли в npm вбудований цей функціонал?
linuxdan

8
У чому користь їх використання npm version?
Стів Беннетт

3
@ConAntonakos Так. Спробуйте щось подібне npm --no-git-tag-version version patch.
Тонг Шень

165

Правильна відповідь

Для цього просто 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, створювати тег і пересилати його на сервер.


Ви можете поділитися фрагментом коду, яким би виглядав сценарій? : D
tUrG0n

1
Перевірте це посилання: github.com/visionmedia/git-extras/blob/master/bin/git-release
gustavotkg

я фактично використовую git-extra repo від vismediamedia. Але git releaseне оновлює package.json відповідно ... github.com/visionmedia/git-extras/isissue/150 : D
tUrG0n

Отже, просто створіть, .git/hooks/pre-release.shщо містить: echo -e "{\n\"version\": "$1"\n}" > package.jsonі спробуйте використовуватиgit release $version
gustavotkg

5
як тут коментується npm version patchчи npm version 0.3.1 вирішить! Чи можете ви відповідно оновити свою відповідь? ти !!
tUrG0n

75

Це те, що я зазвичай роблю зі своїми проектами:

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.


9
Наскільки я можу сказати, npm version patchчи виконує сама себе; однак, щоб натиснути тег на github, я думаю, вам також потрібно git push --tags.
ChrisV

@ChrisV правильний - нарікає npm version patchномер версії та негайно
Dan Esparza

2
@DanEsparza Це може бути налаштування. npm version patchнічого не робить для мене.
Мордред

@Mordred Hmmm ... можливо. Я нічого не бачу в документах npm config про це, але чи може це бути, що у вас немає git на вашому шляху чи щось таке?
Дан Еспарза

@DanEsparza git, безумовно, на шляху, коли я виконую з тієї самої папки, яку я запускаю npm version.
Мордред

29

Надати більш сучасний підхід.

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"

Що:

  1. ... запустити тести ...

  2. перейдіть package.jsonна наступну другорядну версію (наприклад: 1.8.1 на 1.9.0)

  3. натисніть на зміни

  4. створити новий реліз тегів git та

  5. опублікуйте пакет npm.

--forceце показати, хто є начальником! Жарти вбік див. Https://github.com/npm/npm/isissue/8620


3
Ви також можете додати такий сценарій, як "deploy-minor": "npm version minor --force -m \"version %s\""все, що вам потрібно запам’ятати: npm run deploy-minor:)
Крістофор Карле

23

Як додаток до цього npm versionви можете використовувати --no-git-tag-versionпрапор, якщо ви хочете, щоб збільшитись за версію, але немає тегу чи новий комітет:

npm --no-git-tag-version version patch

https://docs.npmjs.com/cli/version


17

Якщо ви використовуєте пряжу, яку можете використовувати

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


11

Я використовую 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>

Мені подобається цей варіант лайки найкращий, хоча я не думаю, що він працює так, як є більше. я не думаю, що "постмердж" існує, "попередній натиск", мабуть, найкращий варіант. а результати "git-branch-is" насправді не спрацьовують, оскільки вони помиляються і в основному руйнують весь пост (оскільки він перевіряє і master, і dev, і
Phil

@Phil Ви все ще можете використовувати postmerge, але зараз він знаходиться post-mergeвсередині husky: {hooks:{}}конфігурації. Яке питання у вас є git-branch-is?
Anima-t3d

для мене це просто помилка замість запуску. Не хвилюйтесь, я закінчився цим варіантом: marketplace.visualstudio.com/…
Phil

1
@Phil дякую, що продовжили роботу. Я просто спробував оновлену версію, і у мене немає помилок, можливо, щось не так із самою вашою командою після об'єднання.
Anima-t3d

5

Я хочу додати трохи ясності відповідям на це запитання.

Навіть думав, що тут є відповіді, які правильно вирішують проблему та пропонують рішення, вони не є правильними. Правильна відповідь на це питання - використовувати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правильної відповіді є наступна:

  1. Якщо користувач використовує структуру папок, у якій він має, package.jsonвін використовує, npmякщо він використовує, npmвін має доступ до npm scripts.
  2. Якщо він має доступ до npm scriptsнього, він має доступ до npm versionкоманди.
  3. Використовуючи цю команду, йому не потрібно встановлювати нічого більше на свій комп'ютер або CD / CI трубу, що в довгостроковій перспективі зменшить зусилля щодо ремонту для проекту та допоможе в налаштуванні.

Інші відповіді, в яких пропонуються інші інструменти, є невірними.

gulp-bump працює, але вимагає іншого додаткового пакету, який може створювати проблеми в довгостроковій перспективі (пункт 3 моєї відповіді)

grunt-bump працює, але вимагає іншого додаткового пакету, який може створювати проблеми в довгостроковій перспективі (пункт 3 моєї відповіді)


2

Спочатку потрібно зрозуміти правила оновлення номера версії. Більше про семантичну версію ви можете прочитати тут.

Кожна версія матиме версію xyz, де вона визначається для різних цілей, як показано нижче.

  1. х - головний, до цього, коли у вас відбулися серйозні зміни, і великі розбіжності зміни відбулися.
  2. y - другорядне, до цього виникає новий функціонал або покращення.
  3. z - виправлення, доповнити це, коли виправлені помилки або скасувати зміни на попередній версії.

Для запуску сценаріїв ви можете визначити його у своєму 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"


0

Я створив інструмент, який може здійснити автоматичну семантичну версію на основі тегів у повідомленнях комітів, відомих як типи змін. Це уважно дотримується Конвенції про повідомлення про кутовий комітет разом із специфікацією семантичного версії.

Ви можете використовувати цей інструмент для автоматичної зміни версії в package.json за допомогою npm CLI (це описано тут ).

Крім того, він може створити журнал змін із цих комітетів, а також має меню (з перевірки орфографії повідомлень про фіксацію) для створення комісій на основі типу змін. Я настійно рекомендую перевірити його та прочитати документи, щоб побачити все, що можна зробити з ним.

Я написав інструмент, оскільки не міг знайти нічого, що відповідало б моїм потребам для мого CICD Pipeline для автоматизації семантичної версії. Я вважаю за краще зосередитись на тому, що є фактичними змінами, ніж те, якою має бути версія, і саме там мій інструмент економить день.

Для отримання додаткової інформації про обґрунтування цього інструменту, будь ласка, дивіться це .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.