在我做一个小版本并标记它之前,我想更新package.json以反映该程序的新版本。
有没有办法自动编辑文件package.json
?
会使用git pre-release hook
帮助吗?
答案 0 :(得分:125)
正确答案
为此,只需npm version patch
=)
我的回答
pre-release
中最初没有git
个问候。至少,man githooks
没有显示它。
例如,如果您正在使用git-extra
(https://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 commit
和git 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"
将会:
...运行测试...
将您的package.json
更改为下一个次要版本(例如:1.8.1至1.9.0)
推送您的更改
创建一个新的git标签版本和
发布你的npm包。
--force
是为了表明谁是老板!旁边的笑话见https://github.com/npm/npm/issues/8620
答案 4 :(得分:17)
作为npm version
的补充,如果您想要版本缓冲但没有标记或新提交,则可以使用--no-git-tag-version
标记:
npm --no-git-tag-version version patch
答案 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
是正确答案的原因如下:
npm version
,则他正在使用package.json
;如果用户使用的是npm
,则可以访问npm
。 / li>
npm scripts
,则他有权访问npm scripts
命令。 提出其他工具的其他答案不正确。
npm version
可行,但需要另一个额外的软件包,该软件包可能会长期产生问题(我的答案的第3点)
gulp-bump
可行,但需要另一个额外的软件包,该软件包可能会长期产生问题(我的答案的第3点)
答案 7 :(得分:2)
我正在使用husky和git-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
传递minor
,patch
,npm run version
参数即可。默认值为patch
。
示例:
npm run version
或npm run verison patch
或npm run verison minor
或npm run version major
答案 9 :(得分:0)
首先,您需要了解升级版本号的规则。您可以在此处详细了解semantic version。
每个版本都具有x.y.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"
}
}