在我做一个小版本并标记它之前,我想更新 package.json 以反映程序的新版本。
有没有办法package.json
自动编辑文件?
会使用git pre-release hook
帮助吗?
正确答案
为此,只需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
which 将执行path/to/pre-release.sh 0.4
. 您的脚本可以编辑package.json
、创建标签并将其推送到服务器。
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,它可能是最简单的解决方案。
这是我通常对我的项目所做的:
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
发布模块。
我希望这是有道理的...
默克。
作为补充,如果您想要版本提升但没有标签或新提交,npm version
您可以使用该标志:--no-git-tag-version
npm --no-git-tag-version version patch
提供更新的方法。
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
如果你使用纱线,你可以使用
yarn version patch
这将package.json
通过 patch (0.0.x)
、 commit 增加版本,并用 format 标记它v0.0.0
--minor
同样,您可以使用or来增加次要或主要版本--major
推送到 git 时,请确保您还使用--follow-tags
git push --follow-tags
你也可以为它创建一个脚本
"release-it": "yarn version --patch && git push --follow-tags"
只需键入即可运行它yarn release-it
我正在使用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 插件在 UI 中显示它
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>
我想为这个问题得到的答案增加一些清晰度。
即使认为这里有一些正确解决问题并提供解决方案的答案,它们也不是正确的。这个问题的正确答案是使用npm version
有没有办法自动编辑文件 package.json?
是的,你可以做的是npm version
在需要时运行命令,你可以在这里阅读更多关于它的信息 npm version,但基本用法是,它会在你的版本(1.0.X )上npm version patch
添加第三位数字顺序package.json
使用 git 预发布挂钩会有所帮助吗?
您可以根据需要配置为npm version
在预发布挂钩上运行命令,但这取决于您的 CD/CI 管道中是否需要该命令,但如果没有该npm version
命令,git pre-release
挂钩将无法“轻松”执行任何操作与package.json
正确答案的原因npm version
如下:
package.json
如果用户正在使用他正在使用的文件夹结构,npm
如果他正在使用npm
,他可以访问npm scripts
.npm scripts
他有权访问该npm version
命令。提出其他工具的其他答案是不正确的。
gulp-bump
有效,但需要另一个额外的软件包,这可能会产生长期问题(我的回答的第 3 点)
grunt-bump
有效,但需要另一个额外的软件包,这可能会产生长期问题(我的回答的第 3 点)
首先,您需要了解升级版本号的规则。您可以在此处阅读有关语义版本的更多信息。
每个版本都有 xyz 版本,它为不同的目的定义,如下所示。
要运行脚本,您可以在 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 run,例如
npm run buildpatch
如果在 git repo 中运行它,默认的 git-tag-version 为 true,如果您不希望这样做,您可以在脚本中添加以下命令:
--no-git-tag-version
例如:"npm --no-git-tag-version version major && ng build --prod"
您可以使用该version-select
软件包:
npm i -D version-select
{
"name": "test",
"version": "1.0.0",
"scripts": {
"version-select": "version-select"
},
"devDependencies": {
"version-select": "^1.0.13"
}
}
以防万一您想使用 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);
}
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
, minor
,patch
参数npm run version
。默认为patch
.
例如:
npm run version
或npm run verison patch
或npm run verison minor
或npm run version major
与赫斯基:
{
"name": "demo-project",
"version": "0.0.3",
"husky": {
"hooks": {
"pre-commit": "npm --no-git-tag-version version patch && git add ."
}
}
}
我创建了一个工具,可以根据提交消息中的标签(称为更改类型)完成自动语义版本控制。这与 Angular Commit Message Convention 和 Semantic Versioning Specification 密切相关。
您可以使用此工具通过 npm CLI 自动更改 package.json 中的版本(此处对此进行了描述)。
此外,它可以从这些提交创建一个变更日志,并且还有一个菜单(带有用于提交消息的拼写检查器)用于根据变更类型创建提交。我强烈建议检查它并阅读文档以查看可以使用它完成的所有内容。
我编写了这个工具是因为我找不到任何适合我的 CICD 管道自动化语义版本控制需求的东西。我宁愿关注实际的变化,而不是版本应该是什么,这就是我的工具节省时间的地方。
有关该工具的基本原理的更多信息,请参阅此。
我知道这是一个老问题,但我希望这种方法可以帮助某人,以防您想自动更新不同位置的两个 package.json 以使用相同的版本。
首先,将这些行添加到您的主要 pakcage.json 脚本部分:
"new-version": "npm version --git-tag-version=false",
"version": "echo 'starting postversion script'",
"postversion": "LAST_VERSION=$(npm pkg get version | sed 's/\"//g') && echo $LAST_VERSION && cd projects/ngx-timeline && sed -i.bak \"s/\\\"version\\\": \\\"[0-9]\\.[0-9]\\.[0-9]\\\"/\\\"version\\\": \\\"$LAST_VERSION\\\"/g\" package.json && rm package.json.bak && git commit -am \"Release $LAST_VERSION\" && git tag v$LAST_VERSION"
然后运行例如 npm run new-version minor,