ฉันจะอัพเดตแต่ละการพึ่งพาใน package.json เป็นเวอร์ชันล่าสุดได้อย่างไร


2011

ฉันคัดลอก package.json จากโครงการอื่นและตอนนี้ต้องการชนการอ้างอิงทั้งหมดกับรุ่นล่าสุดเนื่องจากนี่เป็นโครงการใหม่และฉันไม่สนใจที่จะแก้ไขอะไรบางอย่างถ้ามันหยุด

วิธีที่ง่ายที่สุดในการทำเช่นนี้คืออะไร?

วิธีที่ดีที่สุดที่ฉันรู้ตอนนี้คือการเรียกใช้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"
  }
}

ปรับปรุง 5/1/19 : หกปีต่อมาและฉันยังคงปรับปรุงการตรวจสอบ NPMเป็นโซลูชั่นที่ครอบคลุมกับปัญหานี้ สนุก!


2
ดีใจที่ได้เห็นวิธีการอื่นในการแก้ไขปัญหานี้ ฉันชอบผลผลิตของ Salita มาก คุณสมบัติที่ดีที่เครื่องมือที่ฉันมีส่วนร่วมในตอนนี้คือ github.com/tjunnone/npm-check-updates เป็นการสงวนรักษาซีแมนทิกส์การกำหนดเวอร์ชัน (เช่น 1.x หรือ> 2.1.0) และกรองตามชื่อ / regex / devDeps-only
Raine Revere

1
ต้องมีคำตอบที่ดีกว่าที่นี่ เห็นได้ชัดว่ามีความละเอียดในการพึ่งพาคุณไม่สามารถมีทุกอย่างในเวอร์ชั่นล่าสุดได้ การเพิ่มโมดูลเวอร์ชั่นล่าสุดให้ได้มากที่สุดคือปัญหาการเพิ่มประสิทธิภาพบางอย่าง แต่ NPM ไม่ทราบว่าโมดูลใดที่คุณต้องการเป็นโมดูลล่าสุดมากกว่าโมดูลอื่น ๆ มันจะเจ๋งถ้ามีอะไรแบบนี้: อัพเดท npm - ล่าสุด xyz โดยที่ xyz เป็นโมดูลที่คุณต้องการให้เร็วที่สุดเท่าที่จะเป็นไปได้และโมดูลอื่น ๆ ทั้งหมดจะตามมาด้วยเวอร์ชั่นล่าสุดที่เข้ากันได้
Alexander Mills

2
npm จะจัดการข้อขัดแย้งของเวอร์ชันระหว่างการพึ่งพาที่ใช้ร่วมกันได้อย่างถูกต้องโดยการดาวน์โหลดที่ถูกต้องสำหรับแต่ละรายการ ดังนั้นหาก Dep A ขึ้นอยู่กับ Dep C v1.0.0 และ Dep B ขึ้นอยู่กับ Dep C v2.0.0 พวกเขาแต่ละคนจะถูกติดตั้งและใช้งานอย่างเหมาะสม ดังนั้นคุณมีอิสระที่จะติดตั้งแพ็คเกจล่าสุดที่คุณต้องการ
Raine Revere

ลองใช้วิธีนี้เพื่อบังคับอัปเกรด:npm outdated | sed '1d; s/ .*/@latest/' | xargs npm i --save
miorey

ฉันมักจะตรวจสอบคำตอบนี้ แต่ฉันเห็นว่ามันลดลงในผลลัพธ์ของ Google หวังว่าความคิดเห็นนี้จะช่วยผลักดันความเกี่ยวข้องของมันสำรอง !!
Zach Smith

คำตอบ:


2391

ดูเหมือนว่าการตรวจสอบการอัปเดต npmเป็นวิธีเดียวที่จะทำให้เกิดเหตุการณ์นี้ได้ในขณะนี้

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

ใน npm <3.11:

เพียงแค่เปลี่ยนทุกรุ่นพึ่งพาเพื่อเรียกใช้แล้ว* npm update --save( หมายเหตุ: ใช้งาน ไม่ได้ในเวอร์ชันล่าสุด (3.11) ของ npm )

ก่อน:

  "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เพื่อดูว่าโมดูลจะล้าสมัยเพียงแค่เรียกใช้ มันจะแสดงรายการการติดตั้งใด ๆ ที่มีรุ่นที่ใหม่กว่า


13
@thefourtheye: โดยทั่วไปคุณไม่ควรออกจาก * package.json เนื่องจากคุณอาจติดตั้งโมดูลรุ่นใหม่โดยอัตโนมัติด้วยการหยุดพักการเปลี่ยนแปลงที่ทำให้แอปของคุณพัง เนื่องจากเราใช้--saveที่นี่*จึงถูกแทนที่ด้วยเวอร์ชันปัจจุบันของแต่ละแพ็คเกจ
josh3736

50
ฉันไม่สามารถทำงานนี้ได้ มีการเปลี่ยนแปลงบางอย่างกับ npm ตั้งแต่คำตอบนี้ถูกโพสต์หรือไม่ เมื่อฉันใช้สัญลักษณ์แทนและจากนั้นตัวแทนที่เหลืออยู่ในของฉันnpm install --save package.json
davidtheclark

15
น่าเสียดายที่การใช้งานupdateไม่ได้ผลสำหรับฉัน ฉันยังเหลือสัญลักษณ์ไวด์การ์ดอยู่ มีเอกสารใดบ้างเกี่ยวกับสิ่งนี้ที่คุณรู้หรือแหล่งข้อมูลอื่น ๆ ที่ฉันอาจจะดู?
davidtheclark

120
ค่อนข้างเก่า แต่อาจช่วยคนอื่นได้: github.com/tjunnone/npm-check-updates | ใช้npm install -g npm-check-updatesเพื่อติดตั้งจากนั้นnpm-check-updatesตรวจสอบว่าการอ้างอิงของคุณมีการอัพเดตหรือไม่และnpm-check-updates -uเพื่ออัพเดตแพ็คเกจ package.json ของคุณ จากนั้นเป็นเพียงnpm installและมันจะดาวน์โหลดเวอร์ชันใหม่
RaphaelDDL

5
ปัญหาของคุณอาจจะมาจากความจริงที่ว่าคุณพยายามที่จะแพคเกจปรับปรุง dev โดยการพิมพ์แทนnpm update --save npm update --save-dev
adriendenat

1035

npm-check-updates เป็นโปรแกรมอรรถประโยชน์ที่ปรับ package.json โดยอัตโนมัติด้วยการอ้างอิงทั้งหมดล่าสุด

ดูhttps://www.npmjs.org/package/npm-check-updates

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

[แก้ไข] วิธีที่ล่วงล้ำน้อยลง (หลีกเลี่ยงการติดตั้งทั่วโลก) วิธีการทำเช่นนี้หากคุณมีรุ่นที่ทันสมัยnpmคือ:

$ npx npm-check-updates -u
$ npm install 

135
สิ่งนี้ควรมีให้ใช้ผ่านทางคำสั่ง npm เองซึ่งเป็นทางออกที่ดีที่สุดในการอัพเดทการพึ่งพา
Mohammad Arif

7
ควรเป็นส่วนหนึ่งของ NPM โดยกำเนิดเห็นด้วยอย่างเต็มที่ อย่างไรก็ตามมันไม่ได้เป็นและโซลูชั่นนี้มาในเหมือนสายลม ขอบคุณ.
Stefan

2
ฉันคิดว่าคุณกำลังผลัก [HARD] เพื่อนำสิ่งนี้ไปสู่แกนหลัก npm หรือไม่
enorl76

3
@ แบทแมนใช่ถ้าคุณไม่ได้ติดตั้งมาก่อน มิฉะนั้นใช้การอัปเดต npm ncu เพิ่งอัพเดต package.json ไม่ได้ติดตั้งหรืออัปเดต 'node_modules'
Muzaffer

1
แพ็คเกจที่ไร้ประโยชน์อัปเดตเฉพาะส่วนของแพ็คเกจด้วยncu -aไม่อัปเดต package.json ด้วย
Alexander Kim

385

อัปเดตสำหรับ NPM ล่าสุด

npm 2+ (โหนด 0.12+):


npm outdated
npm update
git commit package-lock.json

Ancient npm (ประมาณปี 2014):

npm install -g npm-check-updates
npm-check-updates
npm shrinkwrap
git commit package-lock.json

ให้แน่ใจว่าได้หดห่อ deps ของคุณหรือคุณอาจจบลงด้วยโครงการที่ตายแล้ว ฉันดึงโครงการออกมาเมื่อวันก่อนและมันจะไม่ทำงานเพราะ deps ของฉันล้าสมัย / อัปเดต / เป็นระเบียบ หากฉันลดขนาดไฟล์ลง npm จะต้องติดตั้งสิ่งที่ฉันต้องการ


รายละเอียด

สำหรับผู้อยากรู้อยากเห็นที่ทำให้มันมาไกลขนาดนี้นี่คือสิ่งที่ฉันแนะนำ:

ใช้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

จากนั้นทำการติดตั้งใหม่ทั้งหมด (โดยที่ฉันได้รับคำเตือนเรื่องการพึ่งพา)

$ rm -rf node_modules
$ npm install 

สุดท้ายให้บันทึกรุ่นที่แน่นอนnpm-shrinkwrap.jsonด้วยnpm shrinkwrap

$ rm npm-shrinkwrap.json
$ npm shrinkwrap

ตอนนี้npm installจะใช้เวอร์ชันที่แน่นอนในnpm-shrinkwrap.json

หากคุณnpm-shrinkwrap.jsonเข้าสู่ระบบคอมไพล์การติดตั้งทั้งหมดจะใช้เวอร์ชั่นเดียวกันแน่นอน

นี่เป็นวิธีการเปลี่ยนจากการพัฒนา (อัปเดตทั้งหมดตลอดเวลา) เป็นการผลิต (ไม่มีใครแตะต้องอะไรเลย)

PS เส้นด้ายจะส่งรายชื่อแพคเกจของคุณไปที่ Facebook


13
นี่คือคำตอบที่ถูกต้องจริง ด้วยการติดตั้ง deps จำนวนมากนี่เป็นวิธีที่ดีกว่า
Angel S. Moreno

6
จากประสบการณ์คำแนะนำในการอัปเดตแพ็คเกจทั้งหมดในครั้งเดียวอาจเป็นอันตรายได้
alphadogg

1
ได้อย่างแน่นอน หากคุณสร้างและnpm-shrinkwrap.jsonเป็นแหล่งที่มาและกระทำเมื่อใดก็ตามที่คุณอัปเดตคุณสามารถ 'กลับไปยังที่ที่คุณอยู่' ได้เสมอ ฉันมองข้ามคุณสมบัติการย่อขนาดเมื่อเริ่ม
Michael Cole

21
สิ่งนี้ไม่ตอบคำถาม คำถามคือวิธีการอัปเดตเวอร์ชันล่าสุด npm updateอัพเดตเป็นเวอร์ชั่น semver เท่านั้นไม่ใช่อัปเดตล่าสุด
gman

1
คุณสามารถตอบถ้ามีทางเลือกอื่นyarn upgrade package@versionหรือไม่?
เบ็นซินแคลร์

201

หากต้องการอัปเดตหนึ่งการอ้างอิงเป็นเวอร์ชันล่าสุดโดยไม่ต้องเปิดpackage.jsonและเปลี่ยนแปลงด้วยตนเองคุณสามารถเรียกใช้

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

กล่าวคือ

npm install express@* --save

สำหรับการอ้างอิงติดตั้ง npm


ตามที่ระบุไว้โดยผู้ใช้Vespakoenเกี่ยวกับการแก้ไขที่ถูกปฏิเสธก็เป็นไปได้ที่จะปรับปรุงหลายแพคเกจพร้อมกันด้วยวิธีนี้:

npm install --save package-nave@* other-package@* whatever-thing@*

นอกจากนี้เขายัง apports npm outdatedหนึ่งซับเปลือกบนพื้นฐานของ ดูการแก้ไขรหัสและคำอธิบาย


PS: ฉันยังเกลียดที่จะต้องแก้ไขด้วยตนเองpackage.jsonสำหรับสิ่งนั้น;)


8
วิธีนี้ดีมาก วิธีที่รวดเร็วและง่ายดายในการอัพเดตแพ็กเกจเดียวเป็นเวอร์ชันล่าสุดโดยไม่ต้องติดตั้งโมดูลใหม่ใด ๆ ฉันชอบการตรวจสอบการอัปเดตของ npm แต่ afaik จะพยายามอัปเดตแพ็กเกจทั้งหมดให้ทันสมัยซึ่งไม่ใช่สิ่งที่คุณต้องการเสมอไป
Chev

สิ่งนี้ไม่ได้ผลสำหรับฉันnpm install react-native-image-picker@* --save
Harry Moreno

1
@Chev: NCU ncu express mocha chaiสามารถกำหนดเป้าหมายแพคเกจเดียวหรือหลาย ncu -x mochaนอกจากนี้คุณยังสามารถยกเว้นแพ็กเกจ ฉันเห็นด้วยกับข้างต้นเป็นวิธีที่ง่ายที่สุดแม้ว่าจะมีการอัพเดตแพ็คเกจเดียว
Raine Revere

2
ฉันเพิ่งใช้บางอย่างที่คล้ายกันที่ได้ผลจากเอกสารล่าสุด ... ใช้ "ล่าสุด" แทน "*"npm install {package-name}@latest {save flags}
Drew Thomas

1
ขอบคุณมากโซลูชันนี้ยอดเยี่ยมและสิ่งที่ฉันกำลังมองหา ช่วยให้คุณสามารถอัปเดตแพคเกจเฉพาะโดยไม่จำเป็นต้องอัปเดตทุกการพึ่งพาซึ่งอาจนำไปสู่ปัญหาที่ไม่คาดคิด!
Dany Wehbe

90

หากคุณบังเอิญใช้รหัส Visual Studioเป็น IDE ของคุณนี่เป็นส่วนเสริมเล็ก ๆ น้อย ๆ ที่ทำให้การอัปเดตpackage.jsonกระบวนการคลิกเพียงครั้งเดียว

เลนส์เวอร์ชั่น

ป้อนคำอธิบายรูปภาพที่นี่


2
มีข้อความเวอร์ชัน 3 ประเสริฐที่นี่: github.com/yavorsky/Bumpแม้ว่าช้าเล็กน้อย
Alexander Kim

4
ทำงานได้อย่างสวยงามในกรณีที่ไม่ชัดเจนสำหรับทุกคนเพียงแค่ตรวจสอบเวอร์ชันใน package.json ของคุณกับเวอร์ชันล่าสุดของที่เก็บ npm และอนุญาตให้คุณคลิกที่เวอร์ชันเพื่ออัปเดตเนื้อหาข้อความใน package.json ของคุณ จากนั้นคุณต้องเรียกใช้ "npm update" เพื่อบอก npm เพื่อติดตั้งเวอร์ชันใหม่
MattG

2
โปรดทราบว่ามันเป็นไปได้แล้วที่จะเห็นการพึ่งพาแพ็คเกจรุ่นล่าสุดพร้อมคำอธิบายสั้น ๆ ในตัว Visual Studio Code โดยการวางเมาส์ไว้บนรายการแพคเกจ: แพคเกจบิวท์อินภายในคำแนะนำ
Gürol Canbek

1
โปรดทราบว่ามันจะไม่ติดตั้งแพ็กเกจโดยอัตโนมัติเมื่อคลิกลิงค์รหัสเลนส์! เพียงอัปเดตข้อความเวอร์ชัน package.json
RA

59

ใช้งานได้ตั้งแต่ npm 1.3.15

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

10
ดีแล้วที่รู้. ฉันเดาว่านี่จะเป็นวิธีปฏิบัติที่ไม่ดีในไซต์การผลิตใด ๆ เพราะจะอัปเดตเป็นเวอร์ชันที่เข้ากันไม่ได้โดยอัตโนมัติ ไวยากรณ์ '~ 2' ล็อคคุณในหมายเลขรุ่นหลักที่กำหนดซึ่งsemverต่อไปนี้จะเข้ากันได้ย้อนหลัง
Raine Revere

1
คุณสามารถตรึงขึ้นอยู่กับการแยง มีคำสั่งสำหรับสิ่งนั้น -2 ฟังดูโอเค
Tobiasz Cudnik

5
ฉันชอบใช้สิ่งนี้พร้อมกับnpm shrinkwrapตรึง deps
daniellmb

ถ้าเราทำสิ่งนี้เราจะรู้แพ็คเกจที่แท้จริงได้อย่างไร? ว่าฉันมีรายการที่เรียกว่า"react": "16.9.0"แล้วฉันเพิ่มล่าสุดและวิ่งnpm iหลังจากนี้ฉันจะหารุ่นปฏิกิริยาที่อยู่ในโครงการของฉันได้อย่างไร เนื่องจาก"react":"latest"มีอะไรเหลืออยู่ใน package.json ของฉันไม่ใช่ตัวเลขแม้หลังจากที่ฉันทำแล้วnpm i
theprogrammer

52
  1. ใช้*เป็นเวอร์ชันสำหรับรุ่นล่าสุดรวมถึงไม่เสถียร
  2. ใช้latestเป็นข้อกำหนดของรุ่นสำหรับรุ่นเสถียรล่าสุด
  3. แก้ไข package.json ด้วยหมายเลขเวอร์ชั่นล่าสุดที่เสถียรโดยใช้ LatestStablePackages

นี่คือตัวอย่าง:

"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"
},

2
นี่คือคำตอบที่ดีที่สุด
Peza

1
สิ่งนี้ควรเป็นคำตอบที่ได้รับการยอมรับ
EigenFool

ยังคงเป็นวิธีที่ปลอดภัยที่สุดที่จะใช้ คำตอบที่ดี.
klewis

43

ข้อแม้เดียวที่ฉันพบด้วยคำตอบที่ดีที่สุดข้างต้นคือมันอัปเดตโมดูลเป็นเวอร์ชันล่าสุด ซึ่งหมายความว่าสามารถอัปเดตเป็นโครงสร้างอัลฟาที่ไม่เสถียร

ฉันจะใช้ยูทิลิตี้ npm-check-updates กลุ่มของฉันใช้เครื่องมือนี้และทำงานได้อย่างมีประสิทธิภาพโดยการติดตั้งการอัพเดทที่เสถียร

ตามที่ Etienne ระบุไว้ข้างต้น: ติดตั้งและรันด้วยสิ่งนี้:

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

3
rm -rf node_modulesก่อนที่จะnpm installกำจัดคำเตือนสำหรับฉัน
Michael Cole

1
ในกรณีที่คุณมี "*" ใน package.json เพียงเปลี่ยนเป็น "0" หรือ "0.0" หรือ "0.0.0" ก่อนที่จะรันการอัปเดตการตรวจสอบ npm
igorpavlov

นี่เป็นวิธีที่ง่ายที่สุดที่จะทำ ไม่ยุ่งยากไม่วุ่นวาย ทำงานเหมือนจับใจ พนักงานทั้งหมดของคุณรับการปรับปรุงและติดตั้งอย่างถูกต้อง ขอบคุณ
Yoraco Gonzales

38

หากต้องการดูแพ็คเกจที่มีเวอร์ชันใหม่กว่าให้ใช้จากนั้นใช้คำสั่งต่อไปนี้:

npm outdated

เพื่ออัปเดตเพียงหนึ่งการอ้างอิงเพียงใช้คำสั่งต่อไปนี้:

npm install yourPackage@latest --save

ตัวอย่างเช่น:

package.jsonไฟล์ของฉันมีการพึ่งพา:

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

แล้วฉันควรจะเขียน:

npm install @progress/kendo-angular-dateinputs@latest --save

ดี แต่ดูเหมือนว่า --save (หรือ --save-dev) ไม่จำเป็นสำหรับการอัปเดต
Burrich

35

ฉันชอบวิธีการอัพเกรด npmมาก มันเป็นยูทิลิตี้บรรทัดคำสั่งง่ายๆที่ผ่านการอ้างอิงทั้งหมดของคุณและช่วยให้คุณเห็นเวอร์ชันปัจจุบันเปรียบเทียบกับเวอร์ชั่นล่าสุดและอัปเดตหากคุณต้องการ

นี่คือภาพหน้าจอของสิ่งที่เกิดขึ้นหลังจากทำงานnpm-upgradeในรูทโครงการของคุณ (ถัดจากpackage.jsonไฟล์):

ตัวอย่างการอัพเกรด npm

สำหรับการพึ่งพาแต่ละครั้งคุณสามารถเลือกอัปเกรดละเว้นดูการเปลี่ยนแปลงหรือสิ้นสุดกระบวนการ มันใช้งานได้ดีสำหรับฉันจนถึงตอนนี้

แก้ไข: เพื่อให้ชัดเจนนี่คือแพ็คเกจของบุคคลที่สามที่ต้องติดตั้งก่อนที่คำสั่งจะทำงาน มันไม่ได้มาพร้อมกับตัวเอง NPM:

npm install -g npm-upgrade

จากนั้นจากรูทของโครงการที่มีไฟล์ package.json:

npm-upgrade

ดูเอกสารที่ปรากฏว่ามันถูกสร้างขึ้นเพื่อทำงานกับการอ้างอิงในท้องถิ่นเท่านั้น
manncito

2
ใช่เพิ่งพูดถึงคนอื่น ๆ ไม่มีเรื่องร้องเรียนต่อคำตอบ :)
มาร์ตินชไนเดอ

2
อืมnpm-upgradeไม่ได้ผลสำหรับฉัน แต่npm upgradeทำแล้วมันอัปเดตไฟล์ package.json ของฉันซึ่งเป็นสิ่งที่ฉันกำลังมองหา
Grandizer

น่าสนใจมีข้อผิดพลาดหรือไม่? แนวคิดเบื้องหลังการใช้npm-upgradeคือคุณจะได้เห็นสิ่งที่กำลังอัพเกรดและเลือกและเลือกสิ่งที่ได้รับการอัพเกรด npm upgradeอาจทำงานได้ดีสำหรับคนส่วนใหญ่ แต่บางครั้งคุณต้องมีการควบคุมเพิ่มเติมเล็กน้อยเมื่ออัปเกรด
manncito

1
คุณสามารถใช้สิ่งนี้กับ NPX: npx npm-upgrade- ค่อนข้างเจ๋ง! :)
x-ray

22

นี่คือ regex พื้นฐานเพื่อจับคู่หมายเลขรุ่น semantic เพื่อให้คุณสามารถแทนที่ทั้งหมดด้วยเครื่องหมายดอกจัน

Regex รุ่นความหมาย

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

วิธีใช้

เลือกเวอร์ชันแพ็คเกจที่คุณต้องการแทนที่ในไฟล์ JSON

สกรีนช็อต: เลือกข้อความที่คุณต้องการแทนที่

ป้อน regex ด้านบนและตรวจสอบว่าตรงกับข้อความที่ถูกต้อง

สกรีนช็อต: ป้อน semex regex ด้านบน

แทนที่การแข่งขันทั้งหมดด้วยเครื่องหมายดอกจัน

สกรีนช็อต: แทนที่เวอร์ชันแพ็คเกจด้วยเครื่องหมายดอกจัน

วิ่ง npm update --save


ไม่ได้เมื่อมีหมายเลขในชื่อแพ็คเกจ ie: babel-preset-es2015, babel-preset-stage-0, hex2rgba อาจจะค้นหาคำพูด / คำพูดสองเท่าที่('|")([>|<|=|~|^|\s])*?(\d+\.)?(\d+\.)?(\*|\d+)
ขอทาน

1
ในตัวแก้ไขใด ๆ ที่รองรับตัวอักษรหลายตัว (ej Sublime Text) คุณสามารถเลือกตัวแรก:และกดctrl+dหลาย ๆ ครั้งจนกว่าคุณจะเลือกพวกมันทั้งหมดจากนั้นไปที่หมายเลขรุ่น (กดลูกศรขวา 2 ครั้ง) และกดเว้นวรรค ctrl แล้วเขียน"*"
Ivan Castellanos

15

ฉันเพิ่งต้องอัปเดตหลายโครงการที่ใช้ npm และ package.json สำหรับเวทย์มนตร์ gruntfile.js คำสั่ง bash ต่อไปนี้ (คำสั่งหลายบรรทัด) ทำงานได้ดีสำหรับฉัน:

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

แนวคิดที่นี่: เพื่อ ไพพ์npm outdatedเอาต์พุตเป็น json ถึงjq
(jq เป็นเครื่องมือแยกวิเคราะห์บรรทัดคำสั่ง json / เคียวรี)
(สังเกตการใช้--depthอาร์กิวเมนต์สำหรับnpm outdated)
jq จะดึงเอาต์พุตลงไปที่ชื่อแพ็กเกจระดับบนสุดเท่านั้น
ในที่สุด xargs ทำให้ LIBRARYNAME แต่ละรายการพร้อมกันในnpm install LIBRARYNAME --save-devคำสั่ง

ข้างต้นคือสิ่งที่ทำงานสำหรับฉันในเครื่องที่เหลือ: node = 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)

หมายเหตุ: ฉันบันทึกเฉพาะไลบรารีที่อัปเดตไปยัง package.json ภายในคีย์ json devDependanciesโดยใช้--save-devนั่นเป็นข้อกำหนดของโครงการของฉันไม่ใช่ของคุณเลย

หลังจากนั้นฉันจะตรวจสอบว่าทุกอย่างเรียบง่ายด้วยน้ำเกรวี่

npm outdated --depth=0

นอกจากนี้คุณสามารถตรวจสอบเวอร์ชันของไลบรารีที่ติดตั้งระดับบนสุดด้วย

npm list --depth=0

ฉันรัก JQ และใช้งานได้เกือบทุกวัน แต่สำหรับวัตถุประสงค์นี้ผมใช้ง่ายawkแทน:npm outdated --depth=0 | grep -v "^Package" | awk '{print $1}' | xargs npm install $1 --save-dev
Qorbani

1
ฉันใช้cat package.json|jq -r '.devDependencies|keys|map(.+"@latest")|@sh'|xargs npm install --save-dev
Richard Ayotte

15

หากคุณต้องการที่จะใช้วิธีการที่นุ่มนวลผ่านสวยงาม (สำหรับ Terminal) รายงานการโต้ตอบอินเตอร์เฟซที่ผมจะแนะนำให้ใช้NPM ตรวจสอบ

มันน้อยกว่าค้อนและให้ความรู้ที่เป็นผลสืบเนื่องของและควบคุมการพึ่งพาของคุณ

เพื่อให้คุณได้สัมผัสกับสิ่งที่รออยู่ที่นี่คือภาพหน้าจอ (คัดลอกมาจากหน้าคอมไพล์สำหรับการตรวจสอบ npm):

ป้อนคำอธิบายรูปภาพที่นี่


14

npm v5คุณลักษณะนี้จะได้รับการแนะนำใน อัปเดตเป็น npm โดยใช้npm install -g npm@latestและ

เพื่ออัปเดต package.json

  1. ลบ/node_modulesและpackage-lock.json (if you have any)

  2. npm updateวิ่ง นี้จะปรับปรุงการอ้างอิง package.json ล่าสุดบนพื้นฐานsemver

เพื่ออัปเดตเป็นเวอร์ชันล่าสุด คุณสามารถไปกับnpm-check-updates


13

หากคุณใช้ yarn คำสั่งต่อไปนี้จะอัพเดตแพ็กเกจทั้งหมดเป็นเวอร์ชันล่าสุด:

yarn upgrade --latest

จากพวกเขาเอกสาร :

upgrade --latestอัพเกรดแพคเกจคำสั่งเดียวกับคำสั่งการอัพเกรด แต่ไม่สนใจหลากหลายรุ่นที่ระบุไว้ใน package.json แต่จะใช้เวอร์ชันที่ระบุโดยแท็กล่าสุดแทน (อาจเป็นการอัพเกรดแพ็คเกจในเวอร์ชันหลัก)


1
ไม่อัปเดตการอ้างอิงในpackage.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

13

ตั้งแต่ npm เวอร์ชัน 5.2.0 มีวิธีการรันในบรรทัดเดียวโดยไม่ต้องติดตั้งแพ็กเกจเพิ่มเติมใด ๆ ไปยังรีจิสตรี npm โกลบอลของคุณหรือโลคัลแอ็พพลิเคชันของคุณ สิ่งนี้สามารถทำได้โดยใช้ประโยชน์จากnpxยูทิลิตี้ใหม่ที่มาพร้อมกับ npm ( คลิกที่นี่เพื่อเรียนรู้เพิ่มเติม )

เรียกใช้คำสั่งต่อไปนี้ในรากของโครงการของคุณ:

npx npm-check-updates -u && npm i

ฉันเพิ่งลองสิ่งนี้และใช้งานได้ ... ยกเว้นฉันต้องเรียกใช้npm installเพื่อดาวน์โหลดการอ้างอิงใหม่ ดังนั้นฉันเดาว่านี่เป็นเพียงการอัปเดต package.json ถ้าฉันไม่ได้ทำอะไรเลย
owsega

@owsega คุณพูดถูกต้องขอบคุณจริงๆ! ฉันแก้ไขคำตอบเพื่อให้ทำงานnpm installหลังจากที่มีการปรับปรุงการอ้างอิง
ilyakam

13

ฉันใช้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

มันncu -uและไม่ncu -uaอยู่ในบรรทัดสุดท้ายที่สอง ฉันไม่สามารถแก้ไขได้เพราะไม่อนุญาตให้เปลี่ยนหนึ่งตัว มีประโยชน์มากโดยวิธี
Sohail Ahmed

10

Updtr!

ขึ้นอยู่กับ npm ที่ล้าสมัย updtr จะติดตั้งเวอร์ชันล่าสุดและรันการทดสอบ npm สำหรับการพึ่งพาแต่ละครั้ง หากการทดสอบประสบความสำเร็จ updtr จะบันทึกหมายเลขเวอร์ชันใหม่ลงใน package.json ของคุณ หากการทดสอบล้มเหลว updtr จะย้อนกลับการเปลี่ยนแปลง

https://github.com/peerigon/updtr


9

คำสั่งที่ฉันต้องใช้เพื่ออัปเดตpackage.jsonสำหรับNPM 3.10.10:

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

พื้นหลัง:

ฉันใช้คำสั่งล่าสุดจาก @ josh3736 แต่ฉันpackage.jsonไม่ได้รับการปรับปรุง จากนั้นฉันสังเกตเห็นข้อความคำอธิบายเมื่อทำงานnpm-check-updates -u:

การพึ่งพาต่อไปนี้เป็นไปตามช่วงเวอร์ชั่นที่ประกาศไว้ แต่เวอร์ชันที่ติดตั้งนั้นอยู่เบื้องหลัง คุณสามารถติดตั้งเวอร์ชันล่าสุดโดยไม่ต้องแก้ไขไฟล์แพ็กเกจของคุณโดยใช้การอัพเดต npm หากคุณต้องการอัปเดตการอ้างอิงในไฟล์แพ็กเกจของคุณให้เรียกใช้ ncu -a

การอ่านเอกสารสำหรับการตรวจสอบการอัปเดต npm คุณสามารถเห็นความแตกต่าง:

https://www.npmjs.com/package/npm-check-updates

-u, - อัปเกรด: เขียนทับไฟล์แพ็กเกจ

-a, - อัปเกรดทั้งหมด: รวมถึงการอ้างอิงเหล่านั้นแม้กระทั่งรุ่นล่าสุดที่ตรงกับการอ้างอิง semver ที่ประกาศ

ncu เป็นนามแฝงnpm-check-updatesตามที่เห็นในข้อความเมื่อพิมพ์npm-check-updates -u:

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

ใน npm-check-updates v3 -aเป็นพฤติกรรมเริ่มต้นและการเขียนทับแพ็คเกจ.json จะเหลือเพียง-uตัวเลือกเท่านั้น
Raine Revere

8

หากคุณกำลังใช้yarnงานyarn upgrade-interactiveเป็นเครื่องมือที่ทันสมัยที่ช่วยให้คุณดูการอ้างอิงที่ล้าสมัยแล้วเลือกสิ่งที่คุณต้องการอัปเดต

npmเหตุผลมากขึ้นที่จะใช้เส้นด้ายมากกว่า หึ


ไหมพรมกำลังเคลื่อนไหวอย่างรวดเร็วกดไปที่ 1.0 แล้วและมีความสุขที่ได้ใช้ นี่ควรเป็นคำตอบที่เลือกใหม่
Josh Habdas

1
ไม่อัปเดตการอ้างอิงในpackage.json- github.com/yarnpkg/yarn/issues/4390
Vandesh

5

คำสั่งดังกล่าวไม่ปลอดภัยเนื่องจากคุณอาจทำลายโมดูลของคุณเมื่อสลับรุ่น แต่ฉันขอแนะนำดังต่อไปนี้

  • ตั้งค่าเวอร์ชันโมดูลโหนดปัจจุบันจริงเป็น package.json โดยใช้npm shrinkwrapคำสั่ง
  • อัปเดตแต่ละการอ้างอิงเป็นเวอร์ชันล่าสุดหากไม่ทำลายการทดสอบของคุณโดยใช้https://github.com/bahmutov/next-updateเครื่องมือบรรทัดคำสั่ง
npm install -g ปรับปรุงครั้งต่อไป
// จากแพ็คเกจของคุณ
ถัดไปปรับปรุง

1
การเปลี่ยนแปลงที่เข้ากันไม่ได้ของ Backward นั้นจำเป็นต้องได้รับการปกป้องสำหรับโครงการที่ใช้งานอยู่ OP มีความกังวลมากขึ้นเกี่ยวกับการเริ่มโครงการใหม่ที่คุณต้องการทำลายสิ่งต่าง ๆ ในตอนนี้แทนที่จะเป็นในภายหลังและมีรุ่นล่าสุดให้ใช้งานได้
Raine Revere

3

ลองใช้คำสั่งต่อไปนี้หากคุณใช้ npm 5 และโหนด 8

ปรับปรุง npm - บันทึก


2
updateคำสั่งไม่ได้ดูเหมือนจะชนอ้างอิง Beyond Definition เดิม ถ้าpackage.jsonบอกว่าคุณจะไม่ได้รับ"1.2.3" 1.2.4นั่นอาจเป็นสิ่งที่ดีหรือไม่ดี :)
ÁlvaroGonzález

3

รหัสต่อไปนี้ (ซึ่งเป็นที่ยอมรับ) เขียนฉันบางอย่างเช่น "ใช้เวลานานเกินไป blah-blah" และไม่ได้ทำอะไรเลย อาจเป็นไปได้ว่าการใช้ค่าสถานะโกลบอลเป็นปัญหา idk

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

ฉันตัดสินใจใช้โปรแกรมแก้ไขข้อความและทำตามวิธีกึ่งคู่มือแทน

ฉันคัดลอกรายการเช่นนี้ (นานกว่านั้น) จากการพึ่งพา dev ของฉันpackage.jsonไปยังโปรแกรมแก้ไขข้อความ notepad ++:

"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คลิกที่ "แทนที่ทั้งหมด" otput คือ:

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

ฉันคัดลอกมันกลับไปทุบตีและกด Enter ทุกอย่างได้รับการอัพเกรดและทำงานได้ดี นั่นคือทั้งหมดที่

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

ฉันไม่คิดว่ามันเป็นเรื่องใหญ่เพราะคุณต้องทำมันทุก ๆ คราว แต่คุณสามารถเขียนสคริปต์ได้อย่างง่ายดายซึ่งแยกวิเคราะห์package.jsonและอัพเกรดแพ็คเกจของคุณ ฉันคิดว่ามันจะดีกว่าด้วยวิธีนี้เพราะคุณสามารถแก้ไขรายการของคุณหากคุณต้องการอะไรเป็นพิเศษตัวอย่างเช่นการรักษา lib เวอร์ชันปัจจุบัน


1
ด้วยการตรวจสอบการอัปเดต npm แสดงว่าเทอร์มินัลแขวนเป็นปัญหาที่รู้จักใน Windows ลองเพิ่ม--packageFile package.jsonเพื่อให้รู้ว่าไม่ต้องรอ stdin
Raine Revere

@RaineRevere ขอบคุณ!
inf3rno


3

ฉันพบวิธีแก้ไขปัญหาอื่นสำหรับรุ่นล่าสุดของ NPM สิ่งที่ฉันต้องการจะทำคือแทนที่การพึ่งพา "*" ทั้งหมดด้วยหมายเลขรุ่นล่าสุดที่ชัดเจน วิธีการที่กล่าวมาไม่ได้ผลสำหรับฉัน

ฉันทำอะไรลงไป:

  1. แทนที่ "*" ทั้งหมดด้วย "^ 0.0.0"
  2. วิ่ง npm-check-updates -u

ทุกอย่างใน package.json ตอนนี้ได้รับการอัพเดตเป็นเวอร์ชั่นล่าสุด


3

หากคุณไม่ต้องการติดตั้งการตรวจสอบการอัปเดตทั่วโลกแบบnpmคุณสามารถเรียกใช้สิ่งต่อไปนี้ได้:

node -e "const pk = JSON.parse(require('fs').readFileSync('package.json', 'utf-8'));require('child_process').spawn('npm', ['install', ...Object.keys(Object.assign({},pk.dependencies, pk.devDependencies)).map(a=>a+'@latest')]).stdout.on('data', d=>console.log(d.toString()))"

2

ทางเลือกคือ

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

ทุกครั้งที่คุณใช้การอัปเดต npm จะอัปเดตเป็นเวอร์ชันล่าสุดโดยอัตโนมัติ สำหรับไวยากรณ์เพิ่มเติมของรุ่นคุณสามารถตรวจสอบได้ที่นี่: https://www.npmjs.org/doc/misc/semver.html


เหตุผลหนึ่งสำหรับการกำหนดเวอร์ชันคือเพื่อป้องกันการเปลี่ยนแปลงที่เข้ากันไม่ได้ย้อนหลังจากเวอร์ชันหลักรุ่นใหม่ ฉันอยากจะแนะนำกับหมายเลขรุ่นนี้หรือ '*' OP มีความเกี่ยวข้องกับการทำให้กระบวนการง่ายขึ้นในขณะที่ยังคงควบคุมเมื่อมันเกิดขึ้น
เรนกราบไหว้

2

โซลูชันที่ไม่มีแพ็คเกจเพิ่มเติม

เปลี่ยนเวอร์ชันของการพึ่งพาทุกรายการเป็น*:

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

npm update --saveจากนั้นเรียก

แพคเกจของคุณบางส่วนได้รับการอัปเดต แต่ไม่ได้ใช่ไหม

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

นี่เป็นส่วนที่ยุ่งยากหากหมายถึง "ปฏิกิริยา" ในท้องถิ่นของคุณต่ำกว่าเวอร์ชั่นล่าสุด ในกรณีนี้การดาวน์โหลดและการอัปเดตแพคเกจ "ตอบสนอง" npm อย่างไรก็ตามรุ่น "local-google-maps" ในท้องที่ของคุณนั้นเหมือนกับเวอร์ชั่นล่าสุด

หากคุณยังต้องการ "อัปเดต" ไม่เปลี่ยนแปลง*คุณต้องลบโมดูลเหล่านี้ออกจาก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หากคุณต้องการอัปเดตการพึ่งพาการพัฒนา


1

Greenkeeper หากคุณใช้ Github https://greenkeeper.io/

เป็นการรวมเข้า Github และง่ายต่อการติดตั้ง เมื่อติดตั้งแล้วมันจะสร้างคำขอดึงโดยอัตโนมัติในที่เก็บที่คุณระบุ (หรือทั้งหมดถ้าต้องการ) และทำให้รหัสของคุณทันสมัยอยู่เสมอโดยไม่บังคับให้คุณทำอะไรด้วยตนเอง PRs ควรทริกเกอร์บิลด์ของบริการ CI และขึ้นอยู่กับการตรวจสอบที่ประสบความสำเร็จหรือล้มเหลวคุณสามารถค้นหาสิ่งที่กระตุ้นให้เกิดปัญหาหรือเมื่อ CI ผ่านเพียงแค่ผสาน PR เข้าด้วยกัน

greenkeeper PR 1 greenkeeper PR 2

ที่ด้านล่างคุณจะเห็นว่าการสร้างครั้งแรกล้มเหลวในตอนแรกและหลังจากการคอมมิท ("อัปเกรดเป็นโหนด v6.9") การทดสอบผ่านดังนั้นฉันจึงสามารถรวมการประชาสัมพันธ์ได้ มาพร้อมกับอีโมจิมากมายเช่นกัน

ทางเลือกอื่นจะเป็นhttps://dependencyci.com/แต่ฉันไม่ได้ทดสอบอย่างเข้มข้น หลังจากดูครั้งแรก Greenkeeper ดูดีขึ้นโดยทั่วไป IMO และมีการรวมที่ดีขึ้น


1
  • npm ล้าสมัยแล้ว
  • ปรับปรุง npm

ควรให้เวอร์ชั่นล่าสุดที่คุณต้องการเข้ากันได้กับแอปของคุณ แต่ไม่ใช่เวอร์ชันล่าสุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.