แฟล็ก - บันทึกทำอะไรกับการติดตั้ง npm


109

ฉันเห็นคำแนะนำในการติดตั้งแพ็คเกจด้วย

npm install <package_name>

หรือ

npm install <package_name> --save

หรือ

npm install <package_name> --save-dev

ตัวเลือกเหล่านี้แตกต่างกันอย่างไร?

คำตอบ:


96

npm install <package_name> --saveติดตั้งแพ็กเกจและอัพเดตการอ้างอิงใน package.json ของคุณ เนื่องจากคำถามนี้ถูกถามจึงมีการเปลี่ยนแปลงเป็น npm ดังนั้น--saveจึงกลายเป็นตัวเลือกเริ่มต้นดังนั้นคุณจึงไม่จำเป็นต้องใช้--saveเพื่ออัปเดตการอ้างอิง

npm install <package_name> --no_save ติดตั้งแพ็กเกจ แต่ไม่อัปเดตการอ้างอิงตามที่ระบุไว้ใน package.json ของคุณ

npm install <package_name> ---save-devอัปเดตdevDependenciesในแพ็คเกจของคุณ สิ่งเหล่านี้ใช้สำหรับการทดสอบและพัฒนาในพื้นที่เท่านั้น

คุณสามารถอ่านเพิ่มเติมได้ที่https://docs.npmjs.com/getting-started/using-a-package.json


3
นี่คือคำตอบยอดนิยมสำหรับการค้นหาโดย Google ของฉันเรื่อง "npm --save flag" โปรดพิจารณาอัปเดตด้วยข้อมูลที่ถูกต้องนั่นคือตอนนี้ - บันทึกเป็นค่าเริ่มต้นและไม่จำเป็นต้องบันทึกเพื่อที่จะไม่อัปเดตรายการการอ้างอิงใน package.json
Jonas Rosenqvist

54

การติดตั้ง npm ใช้แฟล็กที่เป็นตัวเลือกพิเศษ 3 แฟล็กซึ่งบันทึกหรืออัปเดตเวอร์ชันแพ็กเกจในแพ็กเกจหลักของคุณ json:

-S, --save: แพ็คเกจจะปรากฏในการอ้างอิงของคุณ

-D, --save-dev: แพ็คเกจจะปรากฏใน devDependencies ของคุณ

-O, --save-optional: แพ็คเกจจะปรากฏใน optionalDependencies ของคุณ

เมื่อใช้ตัวเลือกใด ๆ ข้างต้นเพื่อบันทึกการอ้างอิงลงใน package.json ของคุณจะมีแฟล็กเพิ่มเติมที่เป็นทางเลือก:

-E, --save-exact: การอ้างอิงที่บันทึกไว้จะได้รับการกำหนดค่าด้วยเวอร์ชันที่แน่นอนแทนที่จะใช้ตัวดำเนินการช่วงค่าเริ่มต้นของ npm นอกจากนี้หากคุณมี npm-shrinkwrap.json ก็จะได้รับการอัปเดตเช่นกัน

<scope>เป็นทางเลือก แพคเกจจะถูกดาวน์โหลดจากรีจิสทรีที่เกี่ยวข้องกับขอบเขตที่ระบุ หากไม่มีการเชื่อมโยงรีจิสทรีกับขอบเขตที่กำหนดระบบจะถือว่ารีจิสทรีเริ่มต้น ดู npm-scope

หมายเหตุ: หากคุณไม่รวม @ -symbol ไว้ในชื่อขอบเขตของคุณ npm จะตีความสิ่งนี้เป็นที่เก็บ GitHub แทนดูด้านล่าง ชื่อขอบเขตต้องตามด้วยเครื่องหมายทับ

ตัวอย่าง:

npm install sax --save
npm install githubname/reponame
npm install @myorg/privatepackage
npm install node-tap --save-dev
npm install dtrace-provider --save-optional
npm install readable-stream --save --save-exact

หมายเหตุ: หากมีชื่อไฟล์หรือโฟลเดอร์<name>อยู่ในไดเร็กทอรีการทำงานปัจจุบันระบบจะพยายามติดตั้งและพยายามดึงแพ็กเกจตามชื่อเท่านั้นหากไม่ถูกต้อง

(จากเอกสารอย่างเป็นทางการ) https://docs.npmjs.com/cli/install


52
ในขณะที่--saveตัวเลือกยังคงปรากฏในการทำงานก็คือไม่จำเป็นต้องใช้อีกต่อไป - แพคเกจจะถูกบันทึกไว้ในขณะนี้เพื่อการอ้างอิงโดยค่าเริ่มต้น ตอนนี้ตรรกะกลับกันแล้ว - ถ้าคุณไม่ต้องการบันทึกแพ็คเกจของคุณคุณต้องระบุ--no-save
Coruscate5

ขอบคุณ @ Coruscate5 ตอบคำถามของฉันอย่างตรงประเด็น
คอน

31

--saveธงไม่ได้มีจุดมุ่งหมาย

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

ณ จุดนี้หากคุณต้องการป้องกันไม่ให้npm installบันทึกการอ้างอิงคุณต้องใช้--no-saveแฟล็ก

ขอขอบคุณที่ Coruscate5 สำหรับการกล่าวขวัญนี้ของพวกเขาแสดงความคิดเห็น

ข้อมูลเพิ่มเติมในเอกสารการติดตั้ง npm :

การติดตั้ง npm จะบันทึกแพ็กเกจที่ระบุลงในการอ้างอิงตามค่าเริ่มต้น นอกจากนี้คุณสามารถควบคุมสถานที่และวิธีการบันทึกด้วยแฟล็กเพิ่มเติม:

-P, --save-prod: แพ็คเกจจะปรากฏในการอ้างอิงของคุณ นี่คือค่าเริ่มต้นเว้นแต่จะมี -D หรือ -O อยู่

-D, --save-dev: แพ็คเกจจะปรากฏใน devDependencies ของคุณ

-O, --save-optional: Package จะปรากฏใน optionalDependencies ของคุณ

- ไม่บันทึก: ป้องกันไม่ให้บันทึกเป็นการอ้างอิง

เมื่อใช้ตัวเลือกใด ๆ ข้างต้นเพื่อบันทึกการอ้างอิงลงใน package.json ของคุณจะมีแฟล็กที่เป็นทางเลือกเพิ่มเติมสองแฟล็ก:

-E, --save-แน่นอน: การอ้างอิงที่บันทึกไว้จะถูกกำหนดค่าด้วยเวอร์ชันที่แน่นอนแทนที่จะใช้ตัวดำเนินการช่วง semver เริ่มต้นของ npm

-B, --save-bundle: การอ้างอิงที่บันทึกไว้จะถูกเพิ่มลงในรายการ bundleDependencies ของคุณ


ขอบคุณสำหรับคำตอบที่อัปเดตเพื่อให้ครอบคลุมสถานการณ์ปัจจุบัน
DrCord

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