自动更新package.json版本

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

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

需要git pre-release hook帮助吗?

西门2020/03/24 15:16:04

首先,您需要了解升级版本号的规则。您可以在此处阅读有关语义版本的更多信息

每个版本都有xyz版本,其中定义了不同的用途,如下所示。

  1. x-major,当您有重大更改且发生更改的差异很大时,请向上移动。
  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"

达蒙2020/03/24 15:16:04

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

您可以使用此工具来使用故宫CLI中的package.json自动更改版本(这被描述在这里)。

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

我写这个工具是因为找不到适合我的CICD Pipeline自动进行语义版本控制的需求的东西。我宁愿将重点放在实际的更改上,而不是在版本上,这是我的工具节省时间的地方。

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

古一2020/03/24 15:16:04

我想为这个问题得到的答案增加一些清晰度。

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

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

是的,你可以做什么来实现这一目标,即运行npm version在需要时命令,你可以阅读更多关于它在这里NPM版本,但基本的用法是npm version patch,它会在您添加的第三个数字顺序package.json版本(1.0 X

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

您可以根据需要配置npm version在预发行版本的挂钩上运行命令,但这取决于CD / CI管道中是否需要此npm version命令,但是如果没有该命令,git pre-release挂钩将无法“轻松”执行任何操作与package.json

npm version正确答案的原因如下:

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

建议使用其他工具的其他答案是错误的。

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

grunt-bump 可行,但需要另一个额外的程序包,这可能会长期产生问题(我的答案的第3点)

达蒙JinJin路易2020/03/24 15:16:04

给出最新的方法。

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 tag版本,

  5. 发布您的npm软件包。

--force是为了表明谁是老板!除了笑话,请参阅https://github.com/npm/npm/issues/8620

乐泡芙2020/03/24 15:16:04

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

yarn version --patch

这将package.json通过patch更新版本(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

Stafan2020/03/24 15:16:04

另外,如果您想要版本变更但不添加标签或提交新内容,则npm version可以使用该--no-git-tag-version标志:

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

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

TomDavaid2020/03/24 15:16:04

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

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

The first line, npm version patch, will increase the patch version by 1 (x.x.1 to x.x.2) in package.json. Then you add all files -- including package.json which at that point has been modified. Then, the usual git commit and git push, and finally npm publish to publish the module.

I hope this makes sense...

Merc.

斯丁逆天2020/03/24 15:16:04

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

如果仍然使用grunt,那可能是最简单的解决方案。