วิธีทำความสะอาดโฟลเดอร์ node_modules ของแพ็คเกจที่ไม่ได้อยู่ใน package.json?


338

สมมติว่าฉันติดตั้งแพคเกจโครงการด้วยnpm installที่มีลักษณะเป็นpackage.jsonโมดูลที่จะติดตั้ง package.jsonหลังจากที่ในขณะที่ผมเห็นว่าผมไม่จำเป็นต้องมีโมดูลที่เฉพาะเจาะจงบางอย่างและนำการอ้างอิงจาก จากนั้นฉันลบโมดูลอื่น ๆ ออกpackage.jsonเพราะไม่จำเป็นอีกต่อไปและโมดูลอื่น ๆ จะถูกแทนที่ด้วยทางเลือก

ตอนนี้ผมต้องการที่จะทำความสะอาดnode_modulesโฟลเดอร์เพื่อให้โมดูลเท่านั้นที่ระบุไว้ในการเข้าพักที่นั่นและส่วนที่เหลือจะต้องไปบางอย่างเช่นpackage.json npm cleanฉันรู้ว่าฉันสามารถลบออกได้ด้วยตนเอง แต่ต้องการมีฟังก์ชั่นน้ำตาลที่พร้อมใช้งาน

คำตอบ:


407

ฉันคิดว่าคุณกำลังมองหา npm prune

npm prune [<name> [<name ...]]

คำสั่งนี้จะลบแพ็คเกจ "ภายนอก" หากระบุชื่อแพ็กเกจแพ็กเกจที่ตรงกับหนึ่งในชื่อที่ระบุจะถูกลบออก

แพ็คเกจภายนอกคือแพ็คเกจที่ไม่ปรากฏในรายการการอ้างอิงของแพ็คเกจหลัก

ดูเอกสาร: https://docs.npmjs.com/cli/prune


1
เท่าที่ฉันรู้ในเวอร์ชัน NPM ใหม่การอ้างอิงทั้งหมดอยู่ที่node_modulesโฟลเดอร์รูทและไม่เหมือนเมื่อก่อนที่แต่ละการพึ่งพามีการอ้างอิงของตัวเองติดตั้งในnode_modulesโฟลเดอร์ของตัวเอง .. ด้วยสำเนาที่นับไม่ถ้วนของการอ้างอิงที่เหมือนกัน ... ดังนั้นnpm pruneจะคำนึงถึงเรื่องนี้หรือไม่? เนื่องจากการอ้างอิงเชิงลึกเหล่านั้นไม่ได้ถูกเขียนไว้ในโครงการหลักpackage.jsonของคุณ .. ลูกพรุนต้องดูซ้ำ ๆ
vsync

2
ลด @vsync ทำจะประสบความสำเร็จกับคำสั่งdocs.npmjs.com/cli/dedupenpm dedupe มันพยายามทำให้แผนผังโหนดง่ายขึ้นโดยการย้ายการขึ้นต่อกันของแผนผัง
knaos

ฉันเคยเห็นลูกพรุน NPM ล้มเหลวในการลบสิ่งที่มักจะเกิดขึ้นเมื่อพื้นที่เก็บข้อมูลองค์กรของฉันมีบางสิ่งที่ติดอยู่ในนั้น จากนั้นฉันต้อง rm-rf มันจะดีถ้ามี "พัดทุกอย่างแล้วให้ reget ทุกอย่างในครั้งเดียว"
ggb667

210

คุณสามารถลบ node_modules / folder ของคุณจากนั้นติดตั้งการพึ่งพาจาก package.json

rm -rf node_modules/
npm install

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


4
ใช่ฉันรู้ว่าฉันสามารถใช้วิธีนี้ได้ แต่ฉันอยากรู้ว่าทำไมยังไม่มีวิธีแก้ปัญหาที่สง่างามสำหรับสิ่งนั้นอีก
Sergei Basharov

จริง ๆ แล้วไม่มีคำสั่ง npm เพื่อลบ node_modules นอกเหนือจากการลบโฟลเดอร์หรือไม่?
Anders

4
บนแพลตฟอร์ม windows มันล้มเหลวขณะลบ node_modules ผ่าน Explorer หรือบรรทัดคำสั่ง (เนื่องจากพา ธ ไปยังบางโมดูลยาวกว่า 256) ควรมีคำสั่ง npm ให้ทำด้วยวิธีที่สะอาดกว่า
Ravi Kumar

9
หรือใช้rmdir node_modules /s /qบน Windows superuser.com/a/179661/440976
Wédney Yuri

5
ผมคิดว่าคำตอบนี้จะหายไปเป็นจุดสำคัญมาก: ถ้าคุณมีข้อ จำกัด จากการจราจร (เช่นคุณมีราคาแพงต่อเมกะไบต์-paid การเชื่อมต่อเช่นมือถือ) และคุณมีจำนวนมากของโมดูลนี้อาจเสียค่าใช้จ่ายในขณะที่pruneตัวเลือก ต้องให้คุณมีการเชื่อมต่ออินเทอร์เน็ตเลย
Ivan Kolmychek

102

เนื่องจากโฟลเดอร์ซ้อนอยู่ Windows ไม่สามารถลบโฟลเดอร์ได้เนื่องจากชื่อยาวเกินไป เพื่อแก้ปัญหานี้ให้ติดตั้ง RimRaf:

npm install rimraf -g

rimraf node_modules

8
หรือเพียงแค่rm -rf node_modules
kappaallday

16
rm -rf node_modulesจะไม่ทำงานบน windows ดูวิธีแก้ปัญหานี้: superuser.com/a/179661/440976
Wédney Yuri

1
win7 x64 rimraf ทำงานได้ดีผ่าน PowerShell .. ขอบคุณ
gorelative

ทางออกที่ดีที่สุดสำหรับ Windows 10 64 บิตผ่านทาง CMD
Matt Cromwell

RM -rf node_modules ไม่ได้ทำงานสำหรับฉันบน Windows 10 แต่ rimraf ทำงานสำหรับฉัน
ssmsnet

24

ง่ายๆแค่วิ่ง

rm -r node_modules

ในความเป็นจริงคุณสามารถลบโฟลเดอร์ใด ๆ ด้วยสิ่งนี้

ชอบrm -r AnyFolderWhichIsNotDeletable จาก ShiftDelete หรือลบAnyFolderWhichIsNotDeletableFromShiftDeleteOrDelete

เพียงแค่เปิด gitbashย้ายไปที่รูทของโฟลเดอร์และเรียกใช้คำสั่งนี้

หวังว่าจะช่วยได้


2
ไม่ทำงานฉันได้รับข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" (ใช้ gitbash
drake035

3
เปิด gitbash ในโหมดผู้ดูแลระบบ ฉันเดาว่าจะช่วย หรือเปลี่ยนการตั้งค่าระดับสิทธิ์ของโฟลเดอร์
Ajay Kotnala

3
นี่จะเป็นการลบแพ็คเกจทั้งหมด OP ชัดเจนว่า "ฉันต้องการล้างโฟลเดอร์ node_modules เพื่อให้เฉพาะโมดูลที่อยู่ใน package.json อยู่ที่นั่น"
โบอาซ

ในกรณีนี้เพื่อนของฉันคุณสามารถทำ "npm ถอนการติดตั้ง package_name" หรือ - บันทึกเป็น sufix ที่จะลบรายการจากไฟล์ package.json เช่นกัน แพ็กเกจ npm ถอนการติดตั้ง package_name (ลบแพ็กเกจ) npm ถอนการติดตั้ง package_name - บันทึก (ลบแพ็กเกจและลบรายการออกจากการอ้างอิงในแพ็คเกจ json) ถอนการติดตั้ง package_name npm --save-dev (ลบแพ็กเกจและลบรายการจาก devdependencies ในแพคเกจ json)
Ajay Kotnala

22

ติดตั้ง rimraf แรกของโลก

npm install rimraf -g

ไปที่พา ธ โดยใช้ cmd ที่โฟลเดอร์ node_modules ของคุณและใช้คำสั่งด้านล่าง

rimraf node_modules

คำตอบที่ดี แต่การติดตั้งแพคเกจเพื่อถอนการติดตั้งอื่น ๆ ไม่ใช่ความคิดที่ดี npm pruneเป็นทางออกที่ดี
Binayak Gouri Shankar

ใช่ แต่ถ้าคุณต้องการลบโฟลเดอร์ node_module ออกจากโครงการของคุณนี่เป็นวิธีที่ดีและง่ายที่สุด
Ankit Parmar


9

จากเวอร์ชัน 6.5.0 npm สนับสนุนคำสั่งclean-installเพื่อรีเฟรชแพ็กเกจทั้งหมดอย่างหนัก


1
นี่คือสิ่งที่ฉันต้องการ เมื่อฉันอัปเดตโหนดสิ่งแรกที่เกิดขึ้นคือ "ดูเหมือนว่าคุณได้เปลี่ยนสภาพแวดล้อมของคุณตั้งแต่ใช้ 'npm install'" เนื่องจากฉันอยู่ในคอนโซลอยู่แล้วมันง่ายที่สุดที่จะทำความสะอาดติดตั้งแทนที่จะไปยุ่งกับการลบโฟลเดอร์ก่อนอื่น ๆ
Jarrod McGuire

3

ฉันได้เพิ่มสองสามบรรทัดใน package.json:

"scripts": {
  ...
  "clean": "rmdir /s /q node_modules",
  "reinstall": "npm run clean && npm install",
  "rebuild": "npm run clean && npm install && rmdir /s /q dist && npm run build --prod",
  ...
}

หากคุณต้องการcleanเพียงคุณเท่านั้นที่สามารถใช้หรือrimraf node_modulesrm -rf node_modules

มันใช้งานได้ดี


2

สำหรับผู้ใช้งาน Windows ทางเลือกอื่นในการลบโฟลเดอร์ดังกล่าวอยู่ที่นี่: http://ask.osify.com/qa/567

ในหมู่พวกเขาเครื่องมือฟรี: ผู้ให้บริการเส้นทางยาวเป็นสิ่งที่ดีที่จะลอง: http://corz.org/windows/software/accessories/Long-Path-Fixer-for-Windows.php


1

บทความที่ดีที่สุดที่ฉันพบเกี่ยวกับมันคือ: https://trilon.io/blog/how-to-delete-all-nodemodules-recursively

ทั้งหมดจากคอนโซลและง่ายต่อการดำเนินการจากจุดโฟลเดอร์ใด ๆ

แต่เป็นบทสรุปของบทความคำสั่งนี้เพื่อค้นหาขนาดสำหรับแต่ละnode_moduleโฟลเดอร์ที่พบในโครงการที่แตกต่างกัน

find . -name "node_modules" -type d -prune -print | xargs du -chs

และเพื่อลบออกจริง:

find . -name 'node_modules' -type d -prune -print -exec rm -rf '{}' \;

บทความมีคำแนะนำสำหรับ windows shell ด้วย


0

ลบ / แก้ไขแพ็คเกจที่ไม่ต้องการใน package-lock.json (ชื่อแพคเกจจะถูกเขียนภายใต้การพึ่งพา & devDependencies) แล้ว

npm install


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