มีวิธีการเพียงถอนการติดตั้งการอ้างอิงที่ไม่ได้ใช้ (ไม่ได้ประกาศ) ทั้งหมดจากโครงการ Node.js (รายการที่ไม่ได้กำหนดไว้ในของฉันอีกต่อไปpackage.json
) เมื่อฉันอัปเดตแอปพลิเคชันของฉัน
มีวิธีการเพียงถอนการติดตั้งการอ้างอิงที่ไม่ได้ใช้ (ไม่ได้ประกาศ) ทั้งหมดจากโครงการ Node.js (รายการที่ไม่ได้กำหนดไว้ในของฉันอีกต่อไปpackage.json
) เมื่อฉันอัปเดตแอปพลิเคชันของฉัน
คำตอบ:
หมายเหตุ : npm
เวอร์ชันล่าสุดทำสิ่งนี้โดยอัตโนมัติเมื่อเปิดใช้งานการล็อกแพ็กเกจดังนั้นจึงไม่จำเป็นยกเว้นการลบแพ็กเกจการพัฒนาด้วย--production
แฟล็ก
เรียกใช้ในการลบโมดูลไม่ได้ระบุไว้ในnpm prune
package.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
หรือไม่?