Trước khi tôi thực hiện một bản phát hành nhỏ và gắn thẻ nó, tôi muốn cập nhật gói.json để phản ánh phiên bản mới của chương trình.
Có cách nào để chỉnh sửa tập tin package.json
tự động?
Sẽ sử dụng một git pre-release hook
sự giúp đỡ?
Trước khi tôi thực hiện một bản phát hành nhỏ và gắn thẻ nó, tôi muốn cập nhật gói.json để phản ánh phiên bản mới của chương trình.
Có cách nào để chỉnh sửa tập tin package.json
tự động?
Sẽ sử dụng một git pre-release hook
sự giúp đỡ?
Câu trả lời:
npm version
có lẽ là câu trả lời đúng Chỉ để đưa ra một giải pháp thay thế tôi khuyên bạn nên càu nhàu . Nó được duy trì bởi một trong những kẻ từ angular.js.
Sử dụng:
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
Nếu bạn đang sử dụng grunt dù sao thì đó có thể là giải pháp đơn giản nhất.
npm version
gì?
npm --no-git-tag-version version patch
.
Câu trả lời đúng
Để làm như vậy, chỉ cần npm version patch
=)
Câu trả lời cũ của tôi
Không có pre-release
móc ban đầu trong git
. Ít nhất, man githooks
không hiển thị nó.
Ví dụ: nếu bạn đang sử dụng git-extra
( https://github.com/visionmedia/git-extras ), bạn có thể sử dụng một pre-release
hook được thực hiện bởi nó, như bạn có thể thấy tại https://github.com/visionmedia/ git-ngoại vi / blob / master / bin / git-phát hành . Nó chỉ cần một .git/hook/pre-release.sh
tập tin thực thi mà chỉnh sửa package.json
tập tin của bạn . Cam kết, đẩy và gắn thẻ sẽ được thực hiện bằng git release
lệnh.
Nếu bạn không sử dụng bất kỳ tiện ích mở rộng nào git
, bạn có thể viết tập lệnh shell (tôi sẽ đặt tên cho nó git-release.sh
) và hơn bạn có thể đặt bí danh cho nó git release
với một cái gì đó như:
git config --global alias.release '!sh path/to/pre-release.sh $1'
Bạn có thể, hơn, sử dụng git release 0.4
sẽ thực thi path/to/pre-release.sh 0.4
. Kịch bản của bạn có thể chỉnh sửa package.json
, tạo thẻ và đẩy nó đến máy chủ.
.git/hooks/pre-release.sh
có chứa: echo -e "{\n\"version\": "$1"\n}" > package.json
và thử sử dụnggit release $version
Đây là những gì tôi thường làm với các dự án của mình:
npm version patch
git add *;
git commit -m "Commit message"
git push
npm publish
Dòng đầu tiên npm version patch
, sẽ tăng phiên bản vá lên 1 (xx1 đến xx2) package.json
. Sau đó, bạn thêm tất cả các tệp - bao gồm cả package.json
tại thời điểm đó đã được sửa đổi. Sau đó, như thường lệ git commit
và git push
, và cuối cùng npm publish
để công bố các mô-đun.
Tôi hy vọng điều này có ý nghĩa ...
Merc.
npm version patch
bản thân cam kết; tuy nhiên, để đẩy thẻ lên github, tôi nghĩ bạn cũng cần phải như vậy git push --tags
.
npm version patch
tăng số phiên bản và ngay lập tức cam kết thay đổi
npm version patch
không cam kết bất cứ điều gì cho tôi.
npm version
.
Để đưa ra một cách tiếp cận cập nhật hơn.
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"
}
Sau đó, bạn chạy nó:
npm version minor --force -m "Some message to commit"
Mà sẽ:
... chạy thử nghiệm ...
thay đổi package.json
phiên bản nhỏ tiếp theo của bạn (ví dụ: 1.8.1 thành 1.9.0)
thúc đẩy thay đổi của bạn
tạo một bản phát hành thẻ git mới và
xuất bản gói npm của bạn.
--force
là thể hiện ai là ông chủ! Đùa sang một bên xem https://github.com/npm/npm/issues/8620
"deploy-minor": "npm version minor --force -m \"version %s\""
vậy, tất cả những gì bạn cần nhớ là npm run deploy-minor
:)
Ngoài ra, npm version
bạn có thể sử dụng --no-git-tag-version
cờ nếu bạn muốn có phiên bản gập nhưng không có thẻ hoặc cam kết mới:
npm --no-git-tag-version version patch
Nếu bạn đang sử dụng sợi, bạn có thể sử dụng
yarn version --patch
Điều này sẽ tăng package.json
phiên bản bằng cách vá (0.0.x)
, cam kết và gắn thẻ với định dạngv0.0.0
Tương tự như vậy, bạn có thể tăng phiên bản nhỏ hoặc chính bằng cách sử dụng --minor
hoặc--major
Khi đẩy sang git, đảm bảo bạn cũng đẩy các thẻ bằng --follow-tags
git push --follow-tags
Bạn cũng có thể tạo một kịch bản cho nó
"release-it": "yarn version --patch && git push --follow-tags"
Đơn giản chỉ cần chạy nó bằng cách gõ yarn release-it
Tôi đang sử dụng husky và git-chi nhánh-là :
Kể từ 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)",
}
}
}
Trước khàn khàn V1:
"scripts": {
...
"postmerge": "(git-branch-is master && npm version minor ||
(git-branch-is dev && npm --no-git-tag-version version patch)",
...
},
Tìm hiểu thêm về phiên bản npm
Webpack hoặc Vue.js
Nếu bạn đang sử dụng webpack hoặc Vue.js, bạn có thể hiển thị thông tin này trong Giao diện người dùng bằng phiên bản Tự động tiêm - Trình cắm Webpack
NUXT
Trong nuxt.config.js
:
var WebpackAutoInject = require('webpack-auto-inject-version');
module.exports = {
build: {
plugins: [
new WebpackAutoInject({
// options
// example:
components: {
InjectAsComment: false
},
}),
]
},
}
Bên trong template
ví dụ của bạn trong phần chân trang:
<p> All rights reserved © 2018 [v[AIV]{version}[/AIV]]</p>
postmerge
, nhưng giờ nó đã post-merge
ở trong husky: {hooks:{}}
cấu hình. Bạn có vấn đề gì với git-branch-is
?
Tôi muốn thêm một số sự rõ ràng cho câu trả lời câu hỏi này.
Thậm chí nghĩ rằng có một số câu trả lời ở đây đang giải quyết đúng vấn đề và đưa ra giải pháp, chúng không phải là câu trả lời đúng. Câu trả lời đúng cho câu hỏi này là sử dụngnpm version
Có cách nào để tự động chỉnh sửa tệp pack.json không?
Vâng, những gì bạn có thể làm để thực hiện điều này là chạy npm version
lệnh khi cần, bạn có thể đọc thêm về nó ở đây phiên bản npm , nhưng việc sử dụng cơ sở sẽ là npm version patch
và nó sẽ thêm thứ tự chữ số 3 trên package.json
phiên bản của bạn (1.0. X )
Sẽ sử dụng một git móc phát hành trước giúp đỡ?
Bạn có thể định cấu hình để chạy npm version
lệnh trên hook trước khi phát hành, khi bạn cần, nhưng điều đó phụ thuộc vào việc đó có phải là thứ bạn cần hay không trong ống CD / CI của bạn, nhưng không có npm version
lệnh thì git pre-release
hook không thể làm bất cứ điều gì "dễ dàng" vớipackage.json
Lý do tại sao npm version
câu trả lời đúng là như sau:
package.json
ta đang sử dụng npm
nếu anh ta đang sử dụng npm
thì anh ta có quyền truy cập vào npm scripts
.npm scripts
, anh ta có quyền truy cập vào npm version
lệnh.Các câu trả lời khác trong đó các công cụ khác được đề xuất là không chính xác.
gulp-bump
hoạt động nhưng yêu cầu một gói bổ sung khác có thể tạo ra các vấn đề trong dài hạn (điểm 3 trong câu trả lời của tôi)
grunt-bump
hoạt động nhưng yêu cầu một gói bổ sung khác có thể tạo ra các vấn đề trong dài hạn (điểm 3 trong câu trả lời của tôi)
Trước tiên, bạn cần hiểu các quy tắc để nâng cấp số phiên bản. Bạn có thể đọc thêm về phiên bản ngữ nghĩa ở đây.
Mỗi phiên bản sẽ có phiên bản xyz nơi nó xác định cho các mục đích khác nhau như được hiển thị bên dưới.
Để chạy các tập lệnh, bạn có thể định nghĩa nó trong gói.json.
"script": {
"buildmajor": "npm version major && ng build --prod",
"buildminor": "npm version minor && ng build --prod",
"buildpatch": "npm version patch && ng build --prod"
}
Trong thiết bị đầu cuối của bạn, bạn chỉ cần chạy npm theo nhu cầu của bạn như
npm run buildpatch
Nếu chạy nó trong git repo, phiên bản git-tag mặc định là đúng và nếu bạn không muốn làm như vậy, bạn có thể thêm lệnh bên dưới vào tập lệnh của mình:
--no-git-tag-version
ví dụ: "npm --no-git-tag-version version major && ng build --prod"
Tôi đã tạo ra một công cụ có thể thực hiện phiên bản ngữ nghĩa tự động dựa trên các thẻ trong thông điệp cam kết, được gọi là các loại thay đổi. Điều này theo sát Công ước Thông điệp Cam kết cùng với Đặc tả Phiên bản ngữ nghĩa.
Bạn có thể sử dụng công cụ này để tự động thay đổi phiên bản trong gói.json bằng cách sử dụng CLI npm (điều này được mô tả ở đây ).
Ngoài ra, nó có thể tạo ra một thay đổi từ các cam kết này và cũng có một menu (với trình kiểm tra chính tả cho các thông điệp cam kết) để tạo các cam kết dựa trên loại thay đổi. Tôi đặc biệt khuyên bạn nên kiểm tra và đọc tài liệu để xem mọi thứ có thể được thực hiện với nó.
Tôi đã viết công cụ này vì tôi không thể tìm thấy bất cứ điều gì phù hợp với nhu cầu của mình cho Đường ống CICD của tôi để tự động hóa phiên bản ngữ nghĩa. Tôi muốn tập trung vào những thay đổi thực tế hơn là phiên bản nên là gì và đó là nơi công cụ của tôi tiết kiệm trong ngày.
Để biết thêm thông tin về lý do cho công cụ, xin vui lòng xem điều này .