Автоматически обновить версию package.json

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

Есть ли способ редактировать файл package.json автоматически?

Использует ли git pre-release hook help?

Ответ 1

npm version, вероятно, правильный ответ. Чтобы дать альтернативу, я рекомендую grunt-bump. Он поддерживается одним из парней из 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

Если вы используете grunt в любом случае, это может быть самое простое решение.

Ответ 2

Правильный ответ

Для этого просто npm version patch =)

Мой старый ответ

В git нет оригинала pre-release. По крайней мере, 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, вы можете написать оболочку script (я назову ее 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. Ваш script может редактировать package.json, создать тег и нажать его на сервер.

Ответ 3

Это то, что я обычно делаю с моими проектами:

npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish

Первая строка, npm version patch, увеличит версию патча на 1 (x.x.1 до x.x.2) в package.json. Затем вы добавляете все файлы, включая package.json, которые в этот момент были изменены. Затем, обычные git commit и git push, и, наконец, npm publish, чтобы опубликовать модуль.

Надеюсь, это имеет смысл...

Merc.

Ответ 4

Чтобы дать более современный подход.

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/issues/8620

Ответ 5

В качестве дополнения к npm version вы можете использовать флаг --no-git-tag-version если вы хотите повысить версию, но не добавить тег или новый коммит:

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

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

Ответ 6

Если вы используете пряжу, вы можете использовать

yarn version --patch

Это увеличит версию package.json по (0.0.x), зафиксирует и v0.0.0 его в формате v0.0.0

Точно так же вы можете поднять минорную или мажорную версию, используя --minor или --major

При нажатии на git убедитесь, что вы также нажимаете на теги --follow-tags

git push --follow-tags

Вы также можете создать скрипт для него

    "release-it": "yarn version --patch && git push --follow-tags"

Просто запустите его, введя команду yarn release-it

Ответ 7

Я использую лайку и 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>

Ответ 8

Я хочу внести ясность в ответы на этот вопрос.

Даже при том, что здесь есть некоторые ответы, которые правильно решают проблему и предлагают решение, они не являются правильными. Правильный ответ на этот вопрос - использовать npm version

Есть ли способ отредактировать файл package.json автоматически?

Да, что вы можете сделать, чтобы это произошло, - это запустить команду npm version когда это необходимо, вы можете прочитать об этом здесь npm version, но базовое использование будет npm version patch и это добавит 3-й порядок цифр в ваш package.json версия package.json (1.0. X)

Поможет ли использование git pre-release hook?

Вы можете настроить запуск команды npm version на 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 моего ответа)

Ответ 9

Во-первых, вам нужно понять правила обновления номера версии. Вы можете прочитать больше о семантической версии здесь.

Каждая версия будет иметь версию XYZ, где она определяется для различных целей, как показано ниже.

  1. x - major, это когда у вас есть серьезные изменения, и это огромное расхождение изменений произошло.
  2. у - второстепенный, до этого, когда у вас появились новые функции или улучшения произошли.
  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-версия true, и если вы не хотите этого делать, вы можете добавить в свои сценарии следующую команду:

--no-git-tag-version

например: "npm --no-git-tag-version version major && ng build --prod"