自动更新package.json版本

tUr*_*G0n 152 git githooks node.js npm

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

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

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

gus*_*tkg 141

正确答案

为此,只需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,您可以编写一个shell脚本(我将其命名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,创建标记并将其推送到服务器.

  • 评论[这里](https://github.com/visionmedia/git-extras/issues/150#issuecomment-10070145)``npm version patch``或``npm version 0.3.1``将解决它!你能相应更新答案吗?TY! (5认同)

zem*_*rco 84

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
Run Code Online (Sandbox Code Playgroud)

无论如何,如果你正在使用grunt,它可能是最简单的解决方案.

  • 如果你正在使用[gulpjs](http://gulpjs.com/):[gulp-bump](https://github.com/stevelacy/gulp-bump):) (11认同)
  • 为什么在npm内置此功能时使用外部库? (8认同)
  • 使用这些比'npm版本'有什么好处? (7认同)
  • @ConAntonakos是的.试试像`npm --no-git-tag-version version patch`这样的东西. (3认同)
  • @JohannPhilippStrathausen 可能人们会投反对票,因为尽管它提到了“npm version”(这是问题的正确答案),但它提出了“grunt”,这不是正确的答案(我可以花很长时间详细说明为什么它不是正确的答案)答案,但这可能比我允许在此处添加的字符更多) (2认同)

Mer*_*erc 62

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

npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish
Run Code Online (Sandbox Code Playgroud)

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

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

芝加哥商业交易所.

  • 据我所知,"npm版本补丁"执行提交本身; 但是,要将标签推送到github,我认为你还需要`git push --tags`. (8认同)
  • @DanEsparza这可能是一个设置事物.`npm version patch`对我没有任何贡献. (2认同)

Jon*_*ker 25

提供更新的方法.

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"
  }
Run Code Online (Sandbox Code Playgroud)

然后你运行它:

npm version minor --force -m "Some message to commit"
Run Code Online (Sandbox Code Playgroud)

哪个会:

  1. ...运行测试......

  2. 将您更改package.json为下一个次要版本(例如:1.8.1至1.9.0)

  3. 推动你的改变

  4. 创建一个新的git标签发布和

  5. 发布您的npm包.

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

  • 您还可以添加像"deploy-minor"这样的脚本:"npm version minor --force -m \"版本%s \""`所以你需要记住的是`npm run deploy-minor` :) (3认同)

Tie*_*eme 18

作为除了npm version可以使用--no-git-tag-version,如果你想有一个版本的凸起,但没有标签或新提交标志:

npm --no-git-tag-version version patch
Run Code Online (Sandbox Code Playgroud)

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


Dmi*_*nko 12

您可以使用该version-select包:

npm i -D version-select
Run Code Online (Sandbox Code Playgroud)
{
    "name": "test",
    "version": "1.0.0",
    "scripts": {
        "version-select": "version-select"
    },
    "devDependencies": {
        "version-select": "^1.0.13"
    }
}

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

阅读更多


Eri*_*Kim 11

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

yarn version --patch
Run Code Online (Sandbox Code Playgroud)

这将package.json通过补丁(0.0.x),提交和标记格式来增加版本v0.0.0

同样,您可以使用--minor或删除次要版本或主要版本--major

当推送到git时,确保你也推动标签 --follow-tags

git push --follow-tags
Run Code Online (Sandbox Code Playgroud)

您也可以为它创建脚本

    "release-it": "yarn version --patch && git push --follow-tags"
Run Code Online (Sandbox Code Playgroud)

只需输入即可运行 yarn release-it


Ale*_*les 10

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

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

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

是的,您可以做的是npm version在需要时运行该命令,您可以在此处阅读有关它的更多信息npm version,但基本用法是npm version patch它会在您的package.json版本 (1.0. X )上添加第 3 位数字顺序

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

您可以根据需要配置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认同)

Mne*_*emo 7

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

每个版本都有 xyz 版本,它为不同的目的定义,如下所示。

  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"
}
Run Code Online (Sandbox Code Playgroud)

在您的终端中,您只需要根据您的需要运行 npm,例如

npm run buildpatch
Run Code Online (Sandbox Code Playgroud)

如果在 git repo 中运行它,默认的 git-tag-version 为 true,如果您不想这样做,您可以将以下命令添加到您的脚本中:

--no-git-tag-version
Run Code Online (Sandbox Code Playgroud)

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


Bha*_*rya 6

以防万一您想使用 npm 包semver 链接来执行此操作

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);
}
Run Code Online (Sandbox Code Playgroud)

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"
  }
}
Run Code Online (Sandbox Code Playgroud)

只需通过major, minor,patch与 进行争论npm run version。默认值为patch.

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

Git 仓库


Ani*_*t3d 5

我正在使用沙哑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)",
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

在赫斯基V1之前:

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

阅读更多有关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
        },
      }),
    ]
  },
}
Run Code Online (Sandbox Code Playgroud)

在您template的页脚中,例如:

<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
Run Code Online (Sandbox Code Playgroud)