javascript मैं नवीनतम संस्करण में package.json में प्रत्येक निर्भरता को कैसे अपडेट करूं?




node.js npm (28)

TLDR; (नए एनपीएम संस्करणों के लिए अद्यतन)

चीजें थोड़ी-थोड़ी बदल गई हैं क्योंकि इन उत्तरों को मूल रूप से लिखा गया था।

एनपीएम 2+: npm outdated + npm update + npm shrinkwrap

पुराना एनपीएम: npm-check-updates पैकेज + npm shrinkwrap

अपने deps को कम करने के लिए सुनिश्चित हो, या आप एक मृत परियोजना के साथ हवा हो सकता है। मैंने दूसरे दिन एक परियोजना खींचा और यह नहीं चलेगा क्योंकि मेरे डीपी सभी पुराने / अपडेट / गड़बड़ से बाहर थे। अगर मैं सिकुड़ गया होता, तो एनपीएम बिल्कुल वही स्थापित होता जो मुझे चाहिए था।

विवरण

उत्सुकता के लिए जो इसे अब तक बनाते हैं, वही है जो मैं अनुशंसा करता हूं:

नवीनतम संस्करणों का सुझाव देने के लिए npm-check-updates या npm outdated उपयोग करें।

# `outdated` is part of newer npm versions (2+)
$ npm outdated
# If you agree, update.  
$ npm update

#       OR

# Install and use the `npm-check-updates` package.
$ npm install -g npm-check-updates
# Then check your project
$ npm-check-updates
# If you agree, update package.json.
$ npm-check-updates -u

फिर एक साफ इंस्टॉल करें (w / o आरएम मुझे कुछ निर्भरता चेतावनियां मिलीं)

$ rm -rf node_modules
$ npm install 

अंत में, npm-shrinkwrap.json साथ सटीक संस्करणों को npm-shrinkwrap.json सहेजें

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

अब, npm install अब npm-shrinkwrap.json में सटीक संस्करणों का उपयोग करेगा

यदि आप npm-shrinkwrap.json जांच करते हैं, तो सभी इंस्टॉल सटीक समान संस्करणों का उपयोग करेंगे।

यह उत्पादन के लिए विकास (सभी अपडेट, हर समय) संक्रमण से बाहर निकलने का एक तरीका है (कोई भी स्पर्श नहीं करता)।

https://code.i-harness.com

मैंने पैकेज.जेसन को किसी अन्य प्रोजेक्ट से कॉपी किया है और अब सभी निर्भरताओं को अपने नवीनतम संस्करणों में टक्कर देना चाहते हैं क्योंकि यह एक ताजा प्रोजेक्ट है और अगर यह टूट जाता है तो मुझे कुछ ठीक करने में कोई फर्क नहीं पड़ता।

ऐसा करने का सबसे आसान तरीका क्या है?

अब मुझे पता है कि सबसे अच्छा तरीका npm info express version चलाने के लिए है, तो प्रत्येक के लिए मैन्युअल रूप से package.json अद्यतन करें। इसके लिए अवश्य ही एक बेहतर तरीका होना चाहिए। '

{
  "name": "myproject",
  "description": "my node project",
  "version": "1.0.0",
  "engines": {
    "node": "0.8.4",
    "npm": "1.1.65"
  },
  "private": true,
  "dependencies": {
    "express": "~3.0.3", // how do I get these bumped to latest?
    "mongodb": "~1.2.5",
    "underscore": "~1.4.2",
    "rjs": "~2.9.0",
    "jade": "~0.27.2",
    "async": "~0.1.22"
  }
}

अब मैं npm-check-updates पर एक सहयोगी हूं, जो इस समस्या का एक बड़ा समाधान है।


  1. अस्थिर समेत नवीनतम रिलीज के लिए संस्करण के रूप में * उपयोग करें
  2. नवीनतम स्थिर संस्करण के लिए संस्करण परिभाषा के रूप में latest उपयोग करें
  3. नवीनतम LatestStablePackages का उपयोग कर नवीनतम नवीनतम संस्करण संख्या के साथ package.json को संशोधित करें

यहाँ एक उदाहरण है:

"dependencies": {
        "express": "latest"  // using the latest STABLE version
    ,   "node-gyp": "latest"    
    ,   "jade": "latest"
    ,   "mongoose": "*" // using the newest version, may involve the unstable releases
    ,   "cookie-parser": "latest"
    ,   "express-session": "latest"
    ,   "body-parser": "latest"
    ,   "nodemailer":"latest"
    ,   "validator": "latest"
    ,   "bcrypt": "latest"
    ,   "formidable": "latest"
    ,   "path": "latest"
    ,   "fs-extra": "latest"
    ,   "moment": "latest"
    ,   "express-device": "latest"
},

Updtr!

एनपीएम पुरानी के आधार पर, अपडेट्रेट नवीनतम संस्करण स्थापित करता है और प्रत्येक निर्भरता के लिए एनपीएम परीक्षण चलाता है। यदि परीक्षण सफल होता है, तो updtr आपके संस्करण.जेसन पर नया संस्करण संख्या सहेजता है। यदि परीक्षण विफल रहता है, हालांकि, updtr अपने परिवर्तन वापस रोल करता है।

https://github.com/peerigon/updtr


अद्यतनों की जांच के लिए एनसीयू एक नया उपनाम है। ऐसा करके आपको पैकेज में अपने संस्करण संख्याओं को मैन्युअल रूप से अपडेट करने की आवश्यकता नहीं है। Json ncu यह आपके लिए करता है। यदि आप लिनक्स मशीन पर हैं तो नीचे दी गई विधि का पालन करें

sudo npm i -g npm-check-updates
// decide between -u or -a
ncu -u, --upgrade and overwrite package file
ncu -a, --upgradeAll include even those dependencies whose latest 
          version satisfies the declared server dependency
sudo npm install

अर्थात् संस्करण संख्याओं से मेल खाने के लिए यहां एक मूल रेगेक्स है ताकि आप उन्हें सभी को तारों से तुरंत बदल सकें।

अर्थपूर्ण संस्करण Regex

([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)

कैसे इस्तेमाल करे

JSON फ़ाइल में उस पैकेज संस्करण का चयन करें जिसे आप प्रतिस्थापित करना चाहते हैं।

ऊपर regex इनपुट और सत्यापित करें कि यह सही पाठ से मेल खाता है।

तारों के साथ सभी मैचों को बदलें।

npm update --save चलाएं - npm update --save


उपरोक्त आदेश असुरक्षित हैं क्योंकि संस्करणों को स्विच करते समय आप अपना मॉड्यूल तोड़ सकते हैं। इसके बजाय मैं निम्नलिखित की सिफारिश करता हूं

  • npm shrinkwrap कमांड का उपयोग कर package.json में वास्तविक वर्तमान नोड मॉड्यूल संस्करण सेट करें।
  • प्रत्येक निर्भरता को नवीनतम संस्करण में अपडेट करें यदि यह https://github.com/bahmutov/next-update कमांड लाइन टूल का उपयोग करके आपके परीक्षण नहीं करता है
npm install -g next-update
// from your package
next-update

उपरोक्त सर्वोत्तम उत्तर के साथ मुझे मिली एकमात्र चेतावनी यह है कि यह नवीनतम संस्करण में मॉड्यूल अपडेट करता है। इसका मतलब यह एक अस्थिर अल्फा निर्माण के लिए अद्यतन कर सकता है।

मैं उस एनपीएम-चेक-अपडेट यूटिलिटी का उपयोग करूंगा। मेरे समूह ने इस टूल का उपयोग किया और यह स्थिर अपडेट इंस्टॉल करके प्रभावी ढंग से काम किया।

जैसा कि एटियेन ने ऊपर बताया है: स्थापित करें और इसके साथ चलाएं:

$ npm install -g npm-check-updates
$ npm-check-updates -u
$ npm install 

एक आसान कदम:

$ npm install -g npm-check-updates && ncu -a && npm i

ऐसा लगता है कि npm-check-updates अब ऐसा करने का एकमात्र तरीका है।

npm i -g npm-check-updates
ncu -u
npm install

एनपीएम पर <3.11:

बस प्रत्येक निर्भरता के संस्करण को * बदलें, फिर npm update --save । ( नोट: हाल ही में (3.11) एनपीएम के संस्करणों में टूटा हुआ )।

पहले:

  "dependencies": {
    "express": "*",
    "mongodb": "*",
    "underscore": "*",
    "rjs": "*",
    "jade": "*",
    "async": "*"
  }

बाद:

  "dependencies": {
    "express": "~3.2.0",
    "mongodb": "~1.2.14",
    "underscore": "~1.4.4",
    "rjs": "~2.10.0",
    "jade": "~0.29.0",
    "async": "~0.2.7"
  }

बेशक, यह निर्भरताओं को अद्यतन करने का ब्लंट हथौड़ा है। यह ठीक है अगर आपने कहा- परियोजना खाली है और कुछ भी तोड़ नहीं सकता है।

दूसरी तरफ, यदि आप एक और परिपक्व परियोजना में काम कर रहे हैं, तो शायद आप यह सत्यापित करना चाहते हैं कि उन्नयन से पहले आपकी निर्भरताओं में कोई ब्रेकिंग बदलाव नहीं है।

यह देखने के लिए कि कौन से मॉड्यूल पुराने हैं, बस npm outdated चलाएं। यह किसी भी स्थापित निर्भरता सूचीबद्ध करेगा जिसमें नए संस्करण उपलब्ध हैं।


ग्रीनकीपर यदि आप गिथब का उपयोग कर रहे हैं। https://greenkeeper.io/

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

नीचे, आप देख सकते हैं कि पहला निर्माण पहले और एक प्रतिबद्धता के बाद विफल हुआ ("नोड v6.9 में अपग्रेड करें") परीक्षण पास हो गए ताकि मैं अंत में पीआर को विलय कर सकूं। बहुत सारे इमोजी के साथ आता है।

एक और विकल्प https://dependencyci.com/ होगा, हालांकि मैंने इसे गहन रूप से परीक्षण नहीं किया था। पहली बार देखने के बाद ग्रीनकीपर सामान्य आईएमओ में बेहतर दिखता है और बेहतर एकीकरण होता है।


निम्नलिखित कोड (जिसे स्वीकार किया गया था) ने मुझे कुछ लिखा "यह बहुत लंबा ब्लहा-ब्लाह लेता है" और कुछ भी नहीं किया। शायद वैश्विक ध्वज का उपयोग समस्या, idk था।

npm i -g npm-check-updates
ncu -u
npm install

मैंने अपने टेक्स्ट एडिटर का उपयोग करने का फैसला किया और इसके बजाय सेमी-मैनुअल दृष्टिकोण का पालन किया।

मैंने अपने package.json की देव निर्भरताओं से नोटपैड ++ टेक्स्ट एडिटर में इस तरह की सूची (बस बहुत अधिक) की प्रतिलिपि बनाई:

"browserify": "10.2.6",
"expect.js": "^0.3.1",
"karma": "^0.13.22",
"karma-browserify": "^5.2.0",

मैंने सर्च मोड को नियमित अभिव्यक्ति में सेट किया है, ^\s*"([^"]+)".*$ पैटर्न का उपयोग पैकेज नाम पाने के लिए किया है और इसे npm uninstall \1 --save-dev \nnpm install \1 --save-dev । "सभी को प्रतिस्थापित करें" पर क्लिक किया गया। ओटपुट यह था:

npm uninstall browserify --save-dev 
npm install browserify --save-dev
npm uninstall expect.js --save-dev 
npm install expect.js --save-dev
npm uninstall karma --save-dev 
npm install karma --save-dev
npm uninstall karma-browserify --save-dev 
npm install karma-browserify --save-dev

मैंने इसे वापस बैश करने के लिए कॉपी किया और एंटर दबाएं। सब कुछ अपग्रेड किया गया था और ठीक काम कर रहा था। बस इतना ही।

"browserify": "^16.1.0",
"expect.js": "^0.3.1",
"karma": "^2.0.0",
"karma-browserify": "^5.2.0",

मुझे नहीं लगता कि यह एक बड़ा सौदा है, क्योंकि आपको इसे केवल हर समय करना है, लेकिन आप आसानी से एक स्क्रिप्ट लिख सकते हैं, जो package.json पार्स करता है और आपके पैकेज को अपग्रेड करता है। मुझे लगता है कि यह इस तरह से बेहतर है, क्योंकि अगर आपको कुछ विशेष की ज़रूरत है, तो आप अपनी सूची संपादित कर सकते हैं, उदाहरण के लिए lib के वर्तमान संस्करण को रखना।


पैकेज.जेसन मैन्युअल रूप से खोलने के बिना अपने अंतिम संस्करण में एक निर्भरता को अपडेट करने और इसे बदलने के लिए, आप चला सकते हैं

npm install {package-name}@* {save flags?}

अर्थात

npm install [email protected]* --save

संदर्भ के लिए, npm-install

जैसा कि एक अस्वीकृत संपादन पर उपयोगकर्ता Vespakoen द्वारा नोट किया गया है, इस तरह एक साथ कई पैकेज अद्यतन करना भी संभव है:

npm install --save [email protected]* [email protected]* [email protected]*

वह npm outdated आधार पर खोल के लिए एक लाइनर भी लगाता है। कोड और स्पष्टीकरण के लिए संपादन देखें।

पीएस: मुझे इस तरह की चीजों के लिए package.json मैन्युअल रूप से संपादित करने से नफरत है;)


बहुत देर से जवाब लेकिन किसी की मदद कर सकते हैं।

यह सुविधा npm v5 में पेश की गई है। npm install -g [email protected] और एनपीएम का उपयोग करके npm install -g [email protected] को अपडेट करें

package.json अद्यतन करने के लिए

  1. हटाएं /node_modules और package-lock.json (if you have any)

  2. npm update चलाएं। यह स्थापित निर्भरताओं के साथ नवीनतम संस्करण में package.json अद्यतन करेगा।

बहुत नवीनतम संस्करण में अद्यतन करने के लिए। आप npm-check-updates साथ जा सकते हैं


मुझे वास्तव में पसंद है कि npm-upgrade कैसे काम करता है। यह एक साधारण कमांड लाइन उपयोगिता है जो आपकी सभी निर्भरताओं के माध्यम से जाती है और आपको नवीनतम संस्करण की तुलना में वर्तमान संस्करण देखने और यदि आप चाहें तो अपडेट कर सकते हैं।

अपनी परियोजना की जड़ में npm-upgade चलाने के बाद क्या होता है इसका एक स्क्रीनशॉट यहां दिया गया है:

प्रत्येक निर्भरता के लिए आप अपग्रेड करना, अनदेखा करना, चेंजलॉग देखना या प्रक्रिया समाप्त करना चुन सकते हैं। यह अब तक मेरे लिए बहुत अच्छा काम करता है।


मुझे हाल ही में कई परियोजनाओं को अद्यतन करना था जो npm और package.json का उपयोग कर रहे थे, उनके gruntfile.js जादू के लिए। निम्नलिखित बैश कमांड (मल्टीलाइन कमांड) ने मेरे लिए अच्छा काम किया:

npm outdated --json --depth=0 | \
jq --ascii-output --monochrome-output '. | keys | .[]' | \
xargs npm install $1 --save-dev

यहां विचार: json के रूप में npm outdated रूप में npm outdated आउटपुट को पाइप करने के लिए
(jq एक json कमांड लाइन पार्सर / क्वेरी उपकरण है)
( npm outdated लिए --depth तर्क के उपयोग पर ध्यान दें)
jq आउटपुट को केवल शीर्ष स्तर के पैकेज नाम पर ही स्ट्रिप करेगा।
आखिरकार xargs प्रत्येक LIBRARYNAME को एक समय में एक npm install LIBRARYNAME --save-dev कमांड में npm install LIBRARYNAME --save-dev

उपर्युक्त है जो मशीन रनिंग पर मेरे लिए काम करता है: नोड = v0.11.10 osx = 10.9.2 npm = 1.3.24

यह आवश्यक है:
xargs http://en.wikipedia.org/wiki/Xargs (मेरी मशीन के मूल निवासी मुझे विश्वास है)
तथा
jq http://stedolan.github.io/jq/ (मैंने इसे brew install jq साथ brew install jq )

नोट: मैं केवल --save-dev का उपयोग करके --save-dev कुंजी devDependancies अंदर devDependancies को अद्यतन पुस्तकालयों को devDependancies --save-dev , जो कि मेरी परियोजनाओं की आवश्यकता थी, संभवतः आपका नहीं।

बाद में मैं जांचता हूं कि सब कुछ सरल के साथ ग्रेवी है

npm outdated --depth=0

साथ ही, आप वर्तमान अपरिवर्तित स्थापित लाइब्रेरी संस्करणों को जांच सकते हैं

npm list --depth=0

मैं इसे संग्रहीत करने के लिए npm-check का उपयोग करता हूं।

npm i -g npm npm-check
npm-check -ug #to update globals
npm-check -u #to update locals

एक और उपयोगी कमांड सूची जो package.json में सटीक संस्करण संख्या रखेगी

npm cache clean
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g #update globals
ncu -ua #update locals
npm i


यदि आप yarn का उपयोग कर रहे हैं, yarn upgrade-interactive वास्तव में चिकना उपकरण है जो आपको अपनी पुरानी निर्भरताओं को देखने की अनुमति दे सकता है और फिर चुनें कि आप कौन से अपडेट करना चाहते हैं।

npm पर यार्न का उपयोग करने के अधिक कारण। हे।


यदि आप एनपीएम 5 और नोड 8 का उपयोग करते हैं तो निम्न आदेश का प्रयास करें

एनपीएम अपडेट - बचाओ


यदि आप यार्न का उपयोग करते हैं, तो निम्न आदेश सभी संकुल को उनके नवीनतम संस्करण में अपडेट करता है:

yarn upgrade --latest

अपने docs :

upgrade --latest कमांड अपग्रेड कमांड के समान पैकेज को अपग्रेड करता है, लेकिन package.json में निर्दिष्ट संस्करण रेंज को अनदेखा करता है। इसके बजाए, नवीनतम टैग द्वारा निर्दिष्ट संस्करण का उपयोग किया जाएगा (संभावित रूप से बड़े संस्करणों में संकुल को अपग्रेड करना)।


यह एनपीएम 1.3.15 के रूप में काम करता है।

"dependencies": {
  "foo": "latest"
}

यह देखने के लिए कि कौन से पैकेज में नए संस्करण उपलब्ध हैं, फिर निम्न आदेश का उपयोग करें:

npm outdated

केवल एक निर्भरता को अद्यतन करने के लिए बस निम्न आदेश का उपयोग करें:

npm install [email protected] --save

उदाहरण के लिए:

मेरी package.json फ़ाइल निर्भरता है:

"@progress/kendo-angular-dateinputs": "^1.3.1",

तो मुझे लिखना चाहिए:

npm install @progress/[email protected] --save

वैकल्पिक है

"dependencies":{
    "foo" : ">=1.4.5"
}

हर बार जब आप एनपीएम अपडेट का उपयोग करते हैं, तो यह स्वचालित रूप से नवीनतम संस्करण में अपडेट हो जाता है। अधिक संस्करण वाक्यविन्यास के लिए, आप यहां देख सकते हैं: https://www.npmjs.org/doc/misc/semver.html


NPM 3.10.10 लिए package.json को अद्यतन करने के लिए मुझे उपयोग करने वाले NPM 3.10.10 :

npm install -g npm-check-updates
ncu -a
npm install

पृष्ठभूमि:

मैं @ josh3736 से नवीनतम कमांड का उपयोग कर रहा था लेकिन मेरा पैकेज.जेसन अपडेट नहीं किया गया था। मैंने npm-check-updates -u चलाते समय विवरण टेक्स्ट देखा npm-check-updates -u :

निम्नलिखित निर्भरता इसकी घोषित संस्करण सीमा से संतुष्ट है, लेकिन स्थापित संस्करण पीछे है। आप npm अद्यतन का उपयोग करके अपनी पैकेज फ़ाइल को संशोधित किए बिना नवीनतम संस्करण स्थापित कर सकते हैं। अगर आप अपनी पैकेज फ़ाइल में निर्भरता को अद्यतन करना चाहते हैं, तो ncu -a चलाएं।

एनपीएम-चेक-अपडेट के लिए प्रलेखन पढ़ना आप अंतर देख सकते हैं:

npm-check-updates

-यू, - अपग्रेड: पैकेज फ़ाइल ओवरराइट करें

-a, --upgradeAll: उन निर्भरताओं को भी शामिल करें जिनके नवीनतम संस्करण घोषित सेमेस्टर निर्भरता को पूरा करते हैं

एनपीयू npm-check-updates लिए उपनाम है जैसा कि संदेश में देखा गया है जब npm-check-updates -u टाइप करना npm-check-updates -u :

[INFO]: You can also use ncu as an alias

npm-check-updates एक उपयोगिता है जो सभी निर्भरताओं के नवीनतम संस्करण के साथ स्वचालित रूप से package.json को समायोजित करती है

npm-check-updates

$ npm install -g npm-check-updates
$ ncu -u
$ npm install 

package.json में सभी निर्भरताओं को नवीनतम करने के लिए मैंने यही किया है:

npm install -g npm-check-updates
ncu -u --packageFile package.json 

अतिरिक्त पैकेज के बिना समाधान

प्रत्येक निर्भरता के संस्करण को * बदलें:

"dependencies": {
    "react": "*",
    "react-google-maps": "*"
  }

फिर npm update --save

आपके कुछ पैकेज अपडेट किए गए थे, लेकिन कुछ नहीं?

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "*"
  }

यह मुश्किल हिस्सा है, इसका मतलब है कि "प्रतिक्रिया" का आपका स्थानीय संस्करण नवीनतम से कम था। इस मामले में एनपीएम डाउनलोड और अद्यतन "प्रतिक्रिया" पैकेज। हालांकि "प्रतिक्रिया-Google-मानचित्र" का आपका स्थानीय संस्करण नवीनतम जैसा ही है।

यदि आप अभी भी अपरिवर्तित * अपडेट करना चाहते हैं, तो आपको इन मॉड्यूल को node_modules फ़ोल्डर से node_modules

उदाहरण के लिए node_modules/react-google-maps हटाएं।

अंत में फिर से npm update --save

"dependencies": {
    "react": "^15.0.1",
    "react-google-maps": "^4.10.1"
  }

यदि आप विकास निर्भरताओं को अद्यतन करना चाहते हैं तो npm update --save-dev चलाने के लिए मत भूलना।


  • एनपीएम पुराना
  • एनपीएम अपडेट

आपको अपने ऐप के लिए नवीनतम वांछित संस्करणों को संगत करना चाहिए। लेकिन नवीनतम संस्करण नहीं।







npm