问题
Before I do a small release and tag it, I'd like to update the package.json to reflect the new version of the program.
Is there a way to edit the file package.json
automatically?
Would using a git pre-release hook
help?
回答1:
npm version
is probably the correct answer. Just to give an alternative I recommend grunt-bump. It is maintained by one of the guys from angular.js.
Usage:
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
If you're using grunt anyway it might be the simplest solution.
回答2:
Right answer
To do so, just npm version patch
=)
My old answer
There is no pre-release
hook originally in git
. At least, man githooks
does not show it.
If you're using git-extra
(https://github.com/visionmedia/git-extras), for instance, you can use a pre-release
hook which is implemented by it, as you can see at https://github.com/visionmedia/git-extras/blob/master/bin/git-release. It is needed only a .git/hook/pre-release.sh
executable file which edits your package.json
file. Committing, pushing and tagging will be done by the git release
command.
If you're not using any extension for git
, you can write a shell script (I'll name it git-release.sh
) and than you can alias it to git release
with something like:
git config --global alias.release '!sh path/to/pre-release.sh $1'
You can, than, use git release 0.4
which will execute path/to/pre-release.sh 0.4
. Your script can edit package.json
, create the tag and push it to the server.
回答3:
This is what I normally do with my projects:
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.
回答4:
To give a more up-to-date approach.
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"
}
Then you run it:
npm version minor --force -m "Some message to commit"
Which will:
... run tests ...
change your
package.json
to a next minor version (e.g: 1.8.1 to 1.9.0)push your changes
create a new git tag release and
publish your npm package.
--force
is to show who is the boss! Jokes aside see https://github.com/npm/npm/issues/8620
回答5:
As an addition to npm version
you can use the --no-git-tag-version
flag if you want a version bump but no tag or a new commit:
npm --no-git-tag-version version patch
https://docs.npmjs.com/cli/version
回答6:
If you are using yarn you can use
yarn version --patch
This will increment package.json
version by patch (0.0.x)
, commit, and tag it with format v0.0.0
Likewise you can bump minor or major version by using --minor
or --major
When pushing to git ensure you also push the tags with --follow-tags
git push --follow-tags
You can also create a script for it
"release-it": "yarn version --patch && git push --follow-tags"
Simply run it by typing yarn release-it
回答7:
I am using husky and git-branch-is:
As of husky 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)",
}
}
}
Prior to husky V1:
"scripts": {
...
"postmerge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
...
},
Read more about npm version
Webpack or Vue.js
If you are using webpack or Vue.js, you can display this in the UI using Auto inject version - Webpack plugin
NUXT
In nuxt.config.js
:
var WebpackAutoInject = require('webpack-auto-inject-version');
module.exports = {
build: {
plugins: [
new WebpackAutoInject({
// options
// example:
components: {
InjectAsComment: false
},
}),
]
},
}
Inside your template
for example in the footer:
<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
回答8:
I want to add some clarity to the answers this question got.
Even thought there are some answers here that are tackling properly the problem and providing a solution, they are not the correct ones. The correct answer to this question is to use npm version
Is there a way to edit the file package.json automatically?
Yes, what you can do to make this happen is to run the npm version
command when needed, you can read more about it here npm version, but the base usage would be npm version patch
and it would add the 3rd digit order on your package.json
version (1.0.X)
Would using a git pre-release hook help?
You could configure to run the npm version
command on the pre-release hook, as you need, but that depends if that is what you need or not in your CD/CI pipe, but without the npm version
command a git pre-release
hook can't do anything "easily" with the package.json
The reason why npm version
is the correct answer is the following:
- If the user is using a folder structure in which he has a
package.json
he is usingnpm
if he is usingnpm
he has access to thenpm scripts
. - If he has access to
npm scripts
he has access to thenpm version
command. - Using this command he doesn't need to install anything more in his computer or CD/CI pipe which on the long term will reduce the maintainability effort for the project, and will help with the setup
The other answers in which other tools are proposed are incorrect.
gulp-bump
works but requires another extra package which could create issues in the long term (point 3 of my answer)
grunt-bump
works but requires another extra package which could create issues in the long term (point 3 of my answer)
回答9:
First, you need to understand the rules for upgrading the versioning number. You can read more about the semantic version here.
Each version will have x.y.z version where it defines for different purpose as shown below.
- x - major, up this when you have major changes and it is huge discrepancy of changes occurred.
- y - minor, up this when you have new functionality or enhancement occurred.
- z - patch, up this when you have bugs fixed or revert changes on earlier version.
To run the scripts, you can define it in your package.json.
"script": {
"buildmajor": "npm version major && ng build --prod",
"buildminor": "npm version minor && ng build --prod",
"buildpatch": "npm version patch && ng build --prod"
}
In your terminal, you just need to npm run accordingly to your needs like
npm run buildpatch
If run it in git repo, the default git-tag-version is true and if you do not wish to do so, you can add below command into your scripts:
--no-git-tag-version
for eg: "npm --no-git-tag-version version major && ng build --prod"
来源:https://stackoverflow.com/questions/13059991/update-package-json-version-automatically