स्वचालित रूप से package.json संस्करण अद्यतन करें


183

इससे पहले कि मैं एक छोटी रिलीज करूं और इसे टैग करूं, मैं इस कार्यक्रम के नए संस्करण को दर्शाने के लिए package.json को अपडेट करना चाहूंगा।

क्या फ़ाइल को package.jsonस्वचालित रूप से संपादित करने का कोई तरीका है ?

एक git pre-release hookमदद का उपयोग करना होगा ?


1
आप एक शेल स्क्रिप्ट क्यों नहीं बनाते हैं जो पैकेज को संपादित करता है। जेसन, कमिट करता है और फिर उसे टैग करता है?
gustavotkg

हाँ तो पूर्व-रिलीज़ हुक उस स्क्रिप्ट को सही करेगा?
tUrG0n

जवाबों:


94

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

यदि आप वैसे भी ग्रंट का उपयोग कर रहे हैं तो यह सबसे सरल उपाय हो सकता है।


12
और अगर आप gulpjs का उपयोग कर रहे हैं : gulp-bump :)
GabLeRoux

मैंने इसके लिए विक को कोडित किया, जो npm, Bower, आदि को काटता है ... एक झपट्टा में गिर गया: github.com/Wildhoney/Vik
Wildhoney

8
जब npm इस कार्यक्षमता में बनाया गया है तो बाहरी पुस्तकालयों का उपयोग क्यों करें?
linuxdan

8
इन ओवरों के उपयोग से क्या लाभ है npm version?
स्टीव बेनेट

3
@ConAntonakos हाँ। कुछ ऐसा आजमाएं npm --no-git-tag-version version patch
टोंग शेन

165

सही उत्तर

ऐसा करने के लिए, बस npm version patch=)

मेरा पुराना जवाब

pre-releaseमूल रूप से कोई हुक नहीं है git। कम से कम, man githooksयह नहीं दिखाता है।

यदि आप उदाहरण के लिए git-extra( https://github.com/visionmedia/git-extras ) का उपयोग कर रहे हैं , तो आप pre-releaseइसके द्वारा लागू किए गए हुक का उपयोग कर सकते हैं, जैसा कि आप https://github.com/visionmedia/ पर देख सकते हैं गिट-एक्स्ट्रा / ब्लॉब / मास्टर / बिन / गिट-रिलीज़ । यह केवल एक .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, टैग बना सकती है और इसे सर्वर पर धकेल सकती है।


क्या आप एक कोड साझा कर सकते हैं कि स्क्रिप्ट क्या दिखेगी? : D
tUrG0n

1
इस लिंक को देखें github.com/visionmedia/git-extras/blob/master/bin/git-release
gustavotkg

मैं वास्तव में visionmedia के git-extra रेपो का उपयोग करता हूं। लेकिन git releaseतदनुसार पैकेज को अपडेट न करें। तदनुसार ... github.com/visionmedia/git-extras/issues/150 : D
tUrG0n

तो, बस .git/hooks/pre-release.shयुक्त echo -e "{\n\"version\": "$1"\n}" > package.jsongit release $version
बनाइए

5
के रूप में यहाँ टिप्पणी की npm version patchया npm version 0.3.1 इसे हल करेंगे! क्या आप अपने जवाब के अनुसार अपडेट कर सकते हैं? Ty !!
tUrG0n

75

यह वही है जो मैं आमतौर पर अपनी परियोजनाओं के साथ करता हूं:

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में मॉड्यूल प्रकाशित करने के लिए।

मैं उम्मीद करता हूं कि इस बात में कोई तुक होगी...

मर्क।


9
जहाँ तक मैं बता सकता हूँ, npm version patchप्रतिबद्ध ही करता है; हालाँकि, टैग को जिथब करने के लिए पुश करने के लिए, मुझे लगता है कि आपको भी इसकी आवश्यकता है git push --tags
क्रिसवील

@ क्रिस सही है - npm version patchसंस्करण संख्या को टक्कर देता है और तुरंत परिवर्तन करता है
दान एस्पराजा

2
@DanEsparza यह एक सेटिंग बात हो सकती है। npm version patchमेरे लिए कुछ भी नहीं करता है।
मोर्ड्रेड

@ मॉर्डर्ड हम्म ... संभवतः। मुझे उस बारे में npm कॉन्फ़िग डॉक्स में कुछ भी दिखाई नहीं दे रहा है, लेकिन क्या ऐसा हो सकता है कि आपको अपने रास्ते में या किसी चीज़ में कोई दिक्कत न हो?
Dan Esparza

@DanEsparza git निश्चित रूप से मार्ग में है जैसा कि मैं ठीक उसी फ़ोल्डर से करता हूं जो मैं चलाता हूं npm version
मोर्ड्रेड

29

अधिक अप-टू-डेट दृष्टिकोण देने के लिए।

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"

जो होगा:

  1. ... परीक्षण चलाएं ...

  2. अपने package.jsonअगले मामूली संस्करण में बदलाव करें (उदाहरण के लिए: 1.8.1 से 1.9.0)

  3. अपने बदलावों को आगे बढ़ाएं

  4. एक नया git टैग रिलीज़ बनाएँ और

  5. अपना npm पैकेज प्रकाशित करें।

--forceदिखाने के लिए कौन मालिक है! चुटकुले एक तरफ देखें https://github.com/npm/npm/issues/8620


3
आप एक स्क्रिप्ट भी जोड़ सकते हैं जैसे "deploy-minor": "npm version minor --force -m \"version %s\""कि आपको याद रखने की ज़रूरत है npm run deploy-minor:)
क्रिस्टोफ़र कार्ले

23

यदि आप एक संस्करण टक्कर चाहते हैं लेकिन कोई टैग या एक नई प्रतिबद्धता चाहते हैं, तो इसके अतिरिक्त npm versionआप --no-git-tag-versionध्वज का उपयोग कर सकते हैं :

npm --no-git-tag-version version patch

https://docs.npmjs.com/cli/version


17

यदि आप यार्न का उपयोग कर रहे हैं तो आप उपयोग कर सकते हैं

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


11

मैं कर्कश और गिट-शाखा का उपयोग कर रहा हूं :

के रूप में कर्कश 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

यदि आप वेबपैक या Vue.js का उपयोग कर रहे हैं, तो आप ऑटो इंजेक्शन संस्करण - वेबपैक प्लगइन का उपयोग करके इसे यूआई में प्रदर्शित कर सकते हैं

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?
एनिमा- t3d

यह मेरे लिए दौड़ने के बजाय सिर्फ त्रुटि होगी। कोई चिंता नहीं है, हालांकि, मैंने इस विकल्प के साथ जाना समाप्त कर दिया है: marketplace.visualstudio.com/…
Phil

1
@ फॉलो अप के लिए धन्यवाद। मैंने अभी अपडेट किए गए संस्करण के साथ प्रयास किया है और मेरी कोई त्रुटि नहीं है, शायद आपके पोस्ट-मर्ज कमांड के साथ कुछ गलत है।
एनिमा- t3d

5

मैं इस प्रश्न के उत्तर में कुछ स्पष्टता जोड़ना चाहता हूं।

यहां तक ​​कि सोचा था कि यहां कुछ उत्तर हैं जो समस्या से ठीक से निपट रहे हैं और एक समाधान प्रदान कर रहे हैं, वे सही नहीं हैं। इस प्रश्न का सही उत्तर उपयोग करना हैnpm version

क्या फ़ाइल package.json को स्वचालित रूप से संपादित करने का कोई तरीका है?

हां, इसे पूरा करने के लिए आप क्या कर सकते हैं npm versionजब जरूरत हो तो कमांड को चलाएं , आप इसके बारे में अधिक यहां npm संस्करण को पढ़ सकते हैं , लेकिन आधार का उपयोग होगा npm version patchऔर यह आपके package.jsonसंस्करण पर 1.0 अंकों के आदेश को जोड़ देगा (1.0। X )

एक पूर्व-रिलीज हुक मदद का उपयोग करेगा?

आप npm versionआवश्यकतानुसार पूर्व-रिलीज़ हुक पर कमांड को चलाने के लिए कॉन्फ़िगर कर सकते हैं , लेकिन यह निर्भर करता है कि क्या वह है जो आपको अपनी सीडी / सीआई पाइप में चाहिए या नहीं, लेकिन npm versionकमांड के बिना एक git pre-releaseहुक "आसानी से" कुछ भी नहीं कर सकता है उसके साथpackage.json

कारण है कि npm versionसही जवाब है वह इस प्रकार है:

  1. यदि उपयोगकर्ता एक फ़ोल्डर संरचना का उपयोग कर रहा है जिसमें उसके पास package.jsonवह उपयोग कर रहा है npmयदि वह उपयोग कर रहा है तो npmउसके पास पहुंच है npm scripts
  2. यदि उसके पास पहुंच है, npm scriptsतो उसके पास npm versionकमांड की पहुंच है ।
  3. इस आदेश का उपयोग करके उसे अपने कंप्यूटर या सीडी / सीआई पाइप में कुछ भी स्थापित करने की आवश्यकता नहीं है, जो लंबे समय तक परियोजना के लिए स्थिरता के प्रयास को कम करेगा, और सेटअप में मदद करेगा

अन्य उत्तर जिनमें अन्य उपकरण प्रस्तावित हैं, गलत हैं।

gulp-bump काम करता है, लेकिन एक और अतिरिक्त पैकेज की आवश्यकता होती है जो दीर्घावधि में समस्याएँ पैदा कर सके (मेरे उत्तर के बिंदु ३)

grunt-bump काम करता है, लेकिन एक और अतिरिक्त पैकेज की आवश्यकता होती है जो दीर्घावधि में समस्याएँ पैदा कर सके (मेरे उत्तर के बिंदु ३)


2

सबसे पहले, आपको संस्करण संख्या को अपग्रेड करने के लिए नियमों को समझने की आवश्यकता है। आप यहाँ अर्थ संस्करण के बारे में अधिक पढ़ सकते हैं ।

प्रत्येक संस्करण में xyz संस्करण होगा जहां यह नीचे दिखाए गए अनुसार अलग-अलग उद्देश्य के लिए परिभाषित करता है।

  1. x - प्रमुख, यह तब होता है जब आपके पास बड़े परिवर्तन होते हैं और यह परिवर्तनों की बड़ी विसंगति है।
  2. y - जब आप नई कार्यक्षमता या वृद्धि हुई है, तो इसे छोटा करें।
  3. z - पैच, इसे तब लगाएं जब आपके पास बग्स ठीक हो जाएं या पहले वाले संस्करण में परिवर्तन वापस कर दें।

स्क्रिप्ट चलाने के लिए, आप इसे अपने पैकेज में परिभाषित कर सकते हैं।

"script": {
    "buildmajor": "npm version major && ng build --prod",
    "buildminor": "npm version minor && ng build --prod",
    "buildpatch": "npm version patch && ng build --prod"
}

अपने टर्मिनल में, आपको अपनी आवश्यकताओं के अनुसार बस एनपीएम चलाने की आवश्यकता है

npm run buildpatch

यदि इसे git repo में चलाया जाता है, तो डिफ़ॉल्ट git-tag-version सत्य है और यदि आप ऐसा नहीं करना चाहते हैं, तो आप अपनी स्क्रिप्ट्स में नीचे कमांड जोड़ सकते हैं:

--no-git-tag-version

उदाहरण के लिए: "npm --no-git-tag-version version major && ng build --prod"


0

मैंने एक उपकरण बनाया है जो प्रतिबद्ध संदेशों में टैग के आधार पर स्वचालित अर्थ वर्जनिंग को पूरा कर सकता है, जिसे परिवर्तन प्रकार के रूप में जाना जाता है। यह सिमेंटिक संस्करण विशिष्टता के साथ कोणीय प्रतिबद्ध संदेश सम्मेलन का बारीकी से अनुसरण करता है।

आप इस टूल का उपयोग npm CLI का उपयोग करके पैकेज में संस्करण को स्वचालित रूप से बदलने के लिए कर सकते हैं (यह यहां वर्णित है )।

इसके अलावा, यह इन कमिट्स से एक चैंज बना सकता है और बदलाव के आधार पर कमिट बनाने के लिए एक मेनू (कमिट मैसेज के लिए स्पेल चेकर के साथ) भी है। मैं इसे हर चीज को देखने के लिए डॉक्स को पढ़ने और पढ़ने की सलाह देता हूं जिसे इसके साथ पूरा किया जा सकता है।

मैंने टूल लिखा क्योंकि मुझे कुछ भी ऐसा नहीं मिला जो सिमेंटिक वर्जनिंग को स्वचालित करने के लिए मेरी CICD पाइपलाइन के लिए मेरी जरूरतों के अनुकूल हो। मैं इस बात पर ध्यान केंद्रित करना चाहता हूं कि वास्तविक परिवर्तन क्या हैं, संस्करण क्या होना चाहिए और यही वह जगह है जहां मेरा उपकरण दिन बचाता है।

उपकरण के लिए तर्क पर अधिक जानकारी के लिए, कृपया इसे देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.