ก่อนที่ฉันจะปล่อยเล็ก ๆ และติดแท็กฉันต้องการอัปเดต 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-releasehook จะไม่สามารถทำอะไรได้อย่างง่ายดาย กับpackage.json
สาเหตุที่npm versionเป็นคำตอบที่ถูกต้องคือ:
package.jsonเขาใช้npmถ้าเขาใช้เขามีการเข้าถึงnpmnpm scriptsnpm 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 ของฉันในการกำหนดเวอร์ชันความหมายแบบอัตโนมัติ ฉันควรจะมุ่งเน้นไปที่การเปลี่ยนแปลงที่เกิดขึ้นจริงคือสิ่งที่ควรจะเป็นและเป็นที่ที่เครื่องมือของฉันบันทึกวัน
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเหตุผลสำหรับเครื่องมือโปรดเห็นนี้