มีวิธีการเพียงถอนการติดตั้งการอ้างอิงที่ไม่ได้ใช้ (ไม่ได้ประกาศ) ทั้งหมดจากโครงการ Node.js (รายการที่ไม่ได้กำหนดไว้ในของฉันอีกต่อไปpackage.json) เมื่อฉันอัปเดตแอปพลิเคชันของฉัน
มีวิธีการเพียงถอนการติดตั้งการอ้างอิงที่ไม่ได้ใช้ (ไม่ได้ประกาศ) ทั้งหมดจากโครงการ Node.js (รายการที่ไม่ได้กำหนดไว้ในของฉันอีกต่อไปpackage.json) เมื่อฉันอัปเดตแอปพลิเคชันของฉัน
คำตอบ:
หมายเหตุ : npmเวอร์ชันล่าสุดทำสิ่งนี้โดยอัตโนมัติเมื่อเปิดใช้งานการล็อกแพ็กเกจดังนั้นจึงไม่จำเป็นยกเว้นการลบแพ็กเกจการพัฒนาด้วย--productionแฟล็ก
เรียกใช้ในการลบโมดูลไม่ได้ระบุไว้ในnpm prunepackage.json
จากnpm help prune:
คำสั่งนี้จะลบแพ็คเกจ "ภายนอก" หากระบุชื่อแพ็กเกจแพ็กเกจที่ตรงกับหนึ่งในชื่อที่ระบุจะถูกลบออก
แพ็คเกจภายนอกคือแพ็คเกจที่ไม่ปรากฏในรายการการอ้างอิงของแพ็คเกจหลัก
หาก
--productionระบุแฟล็กคำสั่งนี้จะลบแพ็กเกจที่ระบุใน devDependencies ของคุณ
package.jsonถ้าผมอ่านที่ถูกต้องนี้จะลบย่อยอ้างอิงทั้งหมดเนื่องจากพวกเขาไม่ได้ระบุไว้ใน นั่นถูกต้องใช่ไหม? ดังนั้นการปรับปรุงหรือติดตั้งครั้งต่อไปจะต้องติดตั้งใหม่
node_modulesไดเรกทอรีของโมดูลดังนั้นพวกเขาจะถูกลบออกพร้อมกับโมดูล
package.jsonได้ เมื่อฉันวิ่งnpm pruneฉันคาดหวังว่ากรรมทั้งหมดรวมถึงnode_modulesโฟลเดอร์ของตัวเองที่มีการอ้างอิงจะถูกลบออก แล้วเรื่องการพึ่งพาของ bower (bower-json, bower-logger, chmodr, fstream, glob, et al.) package.jsonเทคนิคเหล่านี้จะไม่ได้ระบุไว้ในโครงการของฉัน สิ่งเหล่านั้นถูกลบออกหรือไม่?
node_modulesแต่ภายใน node_modules/bower/node_modules "การป้องกัน" node_modules/bower/package.jsonโดย การขึ้นต่อกันของแพ็กเกจของคุณและการขึ้นต่อกันของแพ็กเกจของคุณนั้นไม่ได้ปะปนกัน
หากคุณไม่กังวลเกี่ยวกับการทำเช่นนั้นสักสองสามนาทีการแก้ปัญหาจะทำrm -rf node_modulesและnpm installอีกครั้งเพื่อสร้างโมดูลท้องถิ่น
node_modulesยังตรวจสอบpackage.jsonไฟล์อธิบายกราฟอ้างอิงที่ทำซ้ำได้ การลบและติดตั้งใหม่ของคุณnode_modulesนั้นเป็นการทดสอบการใช้งาน
npm pruneไม่ได้ช่วยสักนิด แต่ก็ทำได้ ปัญหาของฉันคือ symlink ที่ใช้งานไม่ได้
npm prune [[<@scope>/]<pkg>...] [--production] [--dry-run] [--json]
คำสั่งนี้จะลบแพ็คเกจ "ภายนอก" หากระบุชื่อแพ็กเกจแพ็กเกจที่ตรงกับหนึ่งในชื่อที่ระบุจะถูกลบออก
แพ็คเกจภายนอกคือแพ็คเกจที่ไม่ปรากฏในรายการการอ้างอิงของแพ็คเกจหลัก
หาก--productionธงมีการระบุหรือNODE_ENVตัวแปรสภาพแวดล้อมมีการตั้งค่าการผลิตคำสั่งนี้จะเอาแพคเกจที่กำหนดไว้ในของคุณdevDependencies การตั้งค่า--no-ผลิตจะลบล้างNODE_ENVเป็นชุดที่จะผลิต
หากมีการใช้แฟล็ก --dry-runจะไม่มีการเปลี่ยนแปลงใด ๆ
หากใช้แฟล็ก --jsonดังนั้นการเปลี่ยนแปลงการตัด npm (หรือจะทำกับ--dry-run ) จะถูกพิมพ์เป็นวัตถุ JSON
ในการดำเนินงานตามปกติกับแพคเกจล็อคเปิดใช้งานโมดูลภายนอกจะถูกตัดโดยอัตโนมัติเมื่อมีการติดตั้งโมดูลและคุณเท่านั้นที่จะต้องใช้คำสั่งนี้กับ--productionธง
หากคุณปิดใช้งานการล็อกแพ็กเกจโมดูลที่ไม่เกี่ยวข้องจะไม่ถูกลบออกและขึ้นอยู่กับคุณที่จะเรียกใช้การตัดพรุน npmเป็นครั้งคราวเพื่อลบออก
npm dedupe
npm ddp
ค้นหาแผนผังแพ็กเกจโลคัลและพยายามทำให้โครงสร้างโดยรวมง่ายขึ้นโดยย้ายการพึ่งพาขึ้นไปบนต้นไม้ซึ่งสามารถแบ่งใช้แพ็กเกจที่ขึ้นต่อกันหลายตัวได้อย่างมีประสิทธิภาพยิ่งขึ้น
ตัวอย่างเช่นพิจารณากราฟการพึ่งพานี้:
a
+-- b <-- depends on c@1.0.x
| `-- c@1.0.3
`-- d <-- depends on c@~1.0.9
`-- c@1.0.10
ในกรณีนี้npm-dedupeจะเปลี่ยนต้นไม้เป็น:
a
+-- b
+-- d
`-- c@1.0.10
เนื่องจากลักษณะลำดับชั้นของการค้นหาโมดูลของโหนด b และ d ทั้งสองจะได้รับการพึ่งพาของพวกเขาพบโดยแพคเกจเดียวที่ระดับรากของต้นไม้
อัลกอริธึมการขจัดข้อมูลซ้ำซ้อนจะเดินบนต้นไม้โดยให้แต่ละการพึ่งพาอาศัยอยู่ไกลที่สุดเท่าที่จะเป็นไปได้แม้ว่าจะไม่พบข้อมูลซ้ำ ซึ่งจะส่งผลให้ทั้งต้นไม้แบนและ deduplicated
node_modulesเมื่อพวกมันถูกลบออกจากโฟลเดอร์นั้นpackage.jsonหรือไม่?