ก่อนที่ฉันจะปล่อยเล็ก ๆ และติดแท็กฉันต้องการอัปเดต package.json เพื่อให้สอดคล้องกับโปรแกรมเวอร์ชั่นใหม่
มีวิธีแก้ไขไฟล์package.json
โดยอัตโนมัติหรือไม่?
จะใช้ความgit pre-release hook
ช่วยเหลือหรือไม่?
ก่อนที่ฉันจะปล่อยเล็ก ๆ และติดแท็กฉันต้องการอัปเดต package.json เพื่อให้สอดคล้องกับโปรแกรมเวอร์ชั่นใหม่
มีวิธีแก้ไขไฟล์package.json
โดยอัตโนมัติหรือไม่?
จะใช้ความgit pre-release hook
ช่วยเหลือหรือไม่?
คำตอบ:
npm version
อาจเป็นคำตอบที่ถูกต้อง เพียงเพื่อให้ทางเลือกหนึ่งที่ผมขอแนะนำให้ทำเสียงฮึดฮัดชน มันได้รับการดูแลโดยหนึ่งในคนจาก 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
หากคุณใช้เสียงฮึดฮัดแสดงความไม่พอใจมันอาจเป็นทางออกที่ง่ายที่สุด
npm version
อย่างไร
npm --no-git-tag-version version patch
ลองสิ่งที่ต้องการ
คำตอบที่ถูกต้อง
ในการทำเช่นนั้นเพียงแค่npm version patch
=)
คำตอบเก่าของฉัน
ไม่มีเป็นเบ็ดแรกในpre-release
git
อย่างน้อยman githooks
ก็ไม่แสดงเลย
หากคุณกำลังใช้งานgit-extra
( https://github.com/visionmedia/git-extras ) ตัวอย่างเช่นคุณสามารถใช้pre-release
เบ็ดที่ใช้งานได้ซึ่งคุณสามารถดูได้ที่https://github.com/visionmedia/ Git-พิเศษ มันต้องการเพียง.git/hook/pre-release.sh
ไฟล์ปฏิบัติการที่แก้ไขpackage.json
ไฟล์ของคุณ การคอมมิตการผลักและการแท็กจะกระทำโดยgit release
คำสั่ง
หากคุณไม่ได้ใช้ส่วนขยายใด ๆgit
คุณสามารถเขียนเชลล์สคริป (ฉันจะตั้งชื่อมัน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
สร้างแท็กและส่งไปยังเซิร์ฟเวอร์
git release
ไม่ได้อัปเดต package.json ตามลำดับ ... github.com/visionmedia/git-extras/issues/150 : D
.git/hooks/pre-release.sh
ที่มี: echo -e "{\n\"version\": "$1"\n}" > package.json
และลองใช้git release $version
นี่คือสิ่งที่ฉันทำตามปกติกับโครงการของฉัน:
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
จะเผยแพร่โมดูล
ฉันหวังว่ามันจะสมเหตุสมผล ...
Merc
npm version patch
กระทำตัวเอง; แต่จะผลักดันแท็กเพื่อ GitHub git push --tags
ผมคิดว่าคุณยังจำเป็นที่จะต้อง
npm version patch
กระแทกหมายเลขรุ่นและยอมรับการเปลี่ยนแปลงทันที
npm version patch
ไม่ได้ทำอะไรเพื่อฉัน
npm version
แน่นอนในเส้นทางที่ผมกระทำจากโฟลเดอร์เดียวกันแน่นอนฉันวิ่ง
เพื่อให้แนวทางที่เป็นปัจจุบันมากขึ้น
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
"deploy-minor": "npm version minor --force -m \"version %s\""
คุณต้องจำไว้คือnpm run deploy-minor
:)
นอกจากนี้npm version
คุณยังสามารถใช้การ--no-git-tag-version
ตั้งค่าสถานะหากคุณต้องการรุ่นชน แต่ไม่มีแท็กหรือการมอบหมายใหม่:
npm --no-git-tag-version version patch
หากคุณใช้เส้นด้ายคุณสามารถใช้
yarn version --patch
การดำเนินการนี้จะเพิ่มpackage.json
รุ่นด้วยการแก้ไข(0.0.x)
กระทำและติดแท็กด้วยรูปแบบv0.0.0
ในทำนองเดียวกันคุณสามารถชนรุ่นรองหรือรุ่นใหญ่โดยใช้--minor
หรือ--major
เมื่อผลักไปยังคอมไพล์ให้แน่ใจว่าคุณกดแท็กด้วย --follow-tags
git push --follow-tags
คุณยังสามารถสร้างสคริปต์ได้
"release-it": "yarn version --patch && git push --follow-tags"
เพียงเรียกใช้โดยพิมพ์ yarn release-it
ฉันใช้แหบแห้งและgit-branch- คือ :
ณ วันที่ 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 คุณสามารถแสดงสิ่งนี้ได้ใน UI โดยใช้เวอร์ชัน auto inject - ปลั๊กอิน Webpack
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>
postmerge
ได้ แต่ตอนนี้post-merge
อยู่ในการกำหนดค่าhusky: {hooks:{}}
แล้ว สิ่งใดที่คุณมีปัญหากับgit-branch-is
?
ฉันต้องการเพิ่มความชัดเจนให้กับคำตอบที่คำถามนี้ได้รับ
ถึงแม้จะคิดว่ามีคำตอบบางส่วนที่สามารถแก้ปัญหาได้อย่างถูกต้องและจัดหาวิธีแก้ปัญหา แต่ก็ไม่ใช่คำตอบที่ถูกต้อง คำตอบที่ถูกต้องสำหรับคำถามนี้คือการใช้npm version
มีวิธีแก้ไขไฟล์ package.json โดยอัตโนมัติหรือไม่?
ใช่สิ่งที่คุณสามารถทำได้เพื่อให้สิ่งนี้เกิดขึ้นคือการเรียกใช้npm version
คำสั่งเมื่อจำเป็นคุณสามารถอ่านเพิ่มเติมได้ที่นี่เวอร์ชัน npmแต่การใช้งานพื้นฐานจะเป็นnpm version patch
และจะเพิ่มลำดับที่ 3 ในpackage.json
รุ่นของคุณ(1.0. X )
จะใช้ตะขอปล่อยก่อนคอมไพล์หรือไม่?
คุณสามารถกำหนดค่าให้เรียกใช้npm version
คำสั่งบนตะขอ pre-release ได้ตามต้องการ แต่นั่นก็ขึ้นอยู่กับว่าคุณต้องการหรือไม่ในไพพ์ CD / CI ของคุณ แต่ถ้าไม่มีnpm version
คำสั่งgit pre-release
hook จะไม่สามารถทำอะไรได้อย่างง่ายดาย กับ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 ตามความต้องการของคุณเช่น
npm run buildpatch
หากรันใน git repo ค่าเริ่มต้น git-tag-version จะเป็นจริงและหากคุณไม่ต้องการทำเช่นนั้นคุณสามารถเพิ่มคำสั่งด้านล่างลงในสคริปต์ของคุณ:
--no-git-tag-version
สำหรับเช่น: "npm --no-git-tag-version version major && ng build --prod"
ฉันได้สร้างเครื่องมือที่สามารถทำให้การกำหนดเวอร์ชันแบบ semantic อัตโนมัติขึ้นอยู่กับแท็กในการส่งข้อความที่รู้จักกันในชื่อประเภทการเปลี่ยนแปลง นี่เป็นไปตามอนุสัญญาส่งข้อความเชิงมุมอย่างใกล้ชิดพร้อมกับข้อกำหนดการกำหนดเวอร์ชันความหมาย
คุณสามารถใช้เครื่องมือนี้เพื่อเปลี่ยนเวอร์ชั่นใน package.json โดยอัตโนมัติโดยใช้ npm CLI (อธิบายไว้ที่นี่ )
นอกจากนี้มันสามารถสร้างการเปลี่ยนแปลงจากการกระทำเหล่านี้และยังมีเมนู (พร้อมเครื่องตรวจการสะกดคำสำหรับการส่งข้อความ) สำหรับการสร้างการกระทำตามประเภทการเปลี่ยนแปลง ฉันขอแนะนำให้ตรวจสอบและอ่านเอกสารเพื่อดูทุกสิ่งที่สามารถทำได้
ฉันเขียนเครื่องมือนี้เพราะฉันไม่พบสิ่งใดที่เหมาะกับความต้องการของฉันสำหรับ CICD Pipeline ของฉันในการกำหนดเวอร์ชันความหมายแบบอัตโนมัติ ฉันควรจะมุ่งเน้นไปที่การเปลี่ยนแปลงที่เกิดขึ้นจริงคือสิ่งที่ควรจะเป็นและเป็นที่ที่เครื่องมือของฉันบันทึกวัน
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเหตุผลสำหรับเครื่องมือโปรดเห็นนี้