自动更新package.json版本

时间:2012-10-25 00:40:22

标签: git node.js npm githooks

在我做一个小版本并标记它之前,我想更新package.json以反映该程序的新版本。

有没有办法自动编辑文件package.json

会使用git pre-release hook帮助吗?

13 个答案:

答案 0 :(得分:125)

正确答案

为此,只需npm version patch =)

我的回答

pre-release中最初没有git个问候。至少,man githooks没有显示它。

例如,如果您正在使用git-extrahttps://github.com/visionmedia/git-extras),则可以使用由pre-release实现的.git/hook/pre-release.sh挂钩,如https://github.com/visionmedia/git-extras/blob/master/bin/git-release所示。 。只需要一个package.json可执行文件来编辑您的git release文件。提交,推送和标记将由git命令完成。

如果您没有使用git-release.sh的任何扩展程序,则可以编写一个shell脚本(我将其命名为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。您的脚本可以编辑{{1}},创建标记并将其推送到服务器。

答案 1 :(得分:73)

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 :(得分:57)

这就是我通常对我的项目所做的事情:

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

第一行npm version patch将使package.json中的补丁版本增加1(x.x.1到x.x.2)。然后添加所有文件 - 包括此时已修改的package.json。 然后,通常git commitgit push,最后npm publish发布模块。

我希望这是有道理的......

Merc的。

答案 3 :(得分:23)

提供更新的方法。

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包。

  6. --force是为了表明谁是老板!旁边的笑话见https://github.com/npm/npm/issues/8620

答案 4 :(得分:17)

作为npm version的补充,如果您想要版本缓冲但没有标记或新提交,则可以使用--no-git-tag-version标记:

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

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

答案 5 :(得分:9)

如果您使用的是纱线,则可以使用

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

即可运行它

答案 6 :(得分:3)

我想使这个问题的答案更加清楚。

即使认为这里有一些正确解决问题并提供解决方案的答案,也不是正确的答案。这个问题的正确答案是使用npm version

  

有没有一种方法可以自动编辑package.json文件?

是的,您可以做的是在需要时运行npm version命令,可以进一步了解here npm version,但是基本用法是npm version patch,并且它将在您的package.json版本(1.0。 X

上添加三位数的顺序
  

会使用git pre-release钩子帮助吗?

您可以根据需要配置在预发行版挂钩上运行npm version命令,但这取决于您是否需要CD / CI管道中的内容,而没有{{1 }}使用npm version

命令git pre-release钩子无法“轻松”完成任何操作

package.json是正确答案的原因如下:

  1. 如果用户使用的文件夹结构中具有npm version,则他正在使用package.json;如果用户使用的是npm,则可以访问npm。 / li>
  2. 如果他有权访问npm scripts,则他有权访问npm scripts命令。
  3. 使用此命令,他不需要在计算机或CD / CI管道中安装其他任何东西,从长远来看,这将减少项目的可维护性,并有助于设置

提出其他工具的其他答案不正确。

npm version可行,但需要另一个额外的软件包,该软件包可能会长期产生问题(我的答案的第3点)

gulp-bump可行,但需要另一个额外的软件包,该软件包可能会长期产生问题(我的答案的第3点)

答案 7 :(得分:2)

我正在使用huskygit-branch-is

"scripts": {
  ...
  "postmerge": "(git-branch-is master && npm version minor || 
  (git-branch-is dev && npm --no-git-tag-version version patch)",
  ...
},

详细了解npm version

Webpack或Vue.js

如果您使用的是webpack或Vue.js,则可以使用Auto inject version - Webpack plugin

在用户界面中显示此内容

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 :(得分:2)

以防万一,如果您想使用npm软件包semver link

let fs = require('fs');
let semver = require('semver');

if (fs.existsSync('./package.json')) {
    var package = require('./package.json');
    let currentVersion = package.version;
    let type = process.argv[2];
    if (!['major', 'minor', 'patch'].includes(type)) {
        type = 'patch';
    }

    let newVersion = semver.inc(package.version, type);
    package.version = newVersion;
    fs.writeFileSync('./package.json', JSON.stringify(package, null, 2));

    console.log('Version updated', currentVersion, '=>', newVersion);
}

package.json应该看起来像

{
  "name": "versioning",
  "version": "0.0.0",
  "description": "Update version in package.json using npm script",
  "main": "version.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "version": "node version.js"
  },
  "author": "Bhadresh Arya",
  "license": "ISC",
  "dependencies": {
    "semver": "^7.3.2"
  }
}

只需通过major传递minorpatchnpm run version参数即可。默认值为patch

示例: npm run versionnpm run verison patchnpm run verison minornpm run version major

Git Repo

答案 9 :(得分:0)

首先,您需要了解升级版本号的规则。您可以在此处详细了解semantic version

每个版本都具有x.y.z版本,其中定义了不同的用途,如下所示。

  1. x-重大的,当您有重大更改且巨大时,向上移动 发生变化的差异。
  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-version为true;如果您不希望这样做,则可以在脚本中添加以下命令:

--no-git-tag-version

例如:"npm --no-git-tag-version version major && ng build --prod"

答案 10 :(得分:0)

我创建了一个tool,它可以基于提交消息中的标记(称为更改类型)来完成自动语义版本控制。这紧随Angular Commit消息约定以及语义版本控制规范。

您可以使用此工具通过npm CLI(在here中进行描述)自动更改package.json中的版本。

此外,它可以根据这些提交创建一个更改日志,并且还具有一个菜单(带有用于提交消息的拼写检查器),用于根据更改类型创建提交。我强烈建议您检查一下并阅读文档,以查看使用它可以完成的一切。

之所以编写该工具,是因为找不到适合我的CICD管道自动化语义版本控制需求的内容。我宁愿将重点放在实际的更改上,而不是版本上,这是我的工具节省时间的地方。

有关该工具原理的更多信息,请see this

答案 11 :(得分:0)

使用Husky

{
  "name": "demo-project",
  "version": "0.0.3",
  "husky": {
    "hooks": {
      "pre-commit": "npm --no-git-tag-version version patch"
    }
  }
}

答案 12 :(得分:0)

您可以使用version-select软件包:

npm i -D version-select
{
    "name": "test",
    "version": "1.0.0",
    "scripts": {
        "version-select": "version-select"
    },
    "devDependencies": {
        "version-select": "^1.0.13"
    }
}

enter image description here

Read more