เอกสารนี้ตอบคำถามของฉันไม่ดีมาก ฉันไม่เข้าใจคำอธิบายเหล่านั้น ใครสามารถพูดด้วยคำพูดที่ง่ายกว่านี้ได้บ้าง อาจจะมีตัวอย่างถ้ามันยากที่จะเลือกคำง่ายๆ?
EDITยังเพิ่มpeerDependencies
ซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดและอาจทำให้เกิดความสับสน
เอกสารนี้ตอบคำถามของฉันไม่ดีมาก ฉันไม่เข้าใจคำอธิบายเหล่านั้น ใครสามารถพูดด้วยคำพูดที่ง่ายกว่านี้ได้บ้าง อาจจะมีตัวอย่างถ้ามันยากที่จะเลือกคำง่ายๆ?
EDITยังเพิ่มpeerDependencies
ซึ่งมีความเกี่ยวข้องอย่างใกล้ชิดและอาจทำให้เกิดความสับสน
คำตอบ:
สรุปความแตกต่างของพฤติกรรมที่สำคัญ:
dependencies
มีการติดตั้งบนทั้งสอง:
npm install
จากไดเรกทอรีที่มี package.json
npm install $package
ในไดเรกทอรีอื่น ๆdevDependencies
คือ:
npm install
ไดเรกทอรีที่มีอยู่package.json
เว้นแต่คุณจะผ่าน--production
ธง (ไปตอบคำตอบของ Gayan Charith )npm install "$package"
ไดเรกทอรีอื่น ๆ เว้นแต่คุณจะให้--dev
ตัวเลือกแก่มันnpm install
และคุณต้องแก้ปัญหาการพึ่งพาตนเองด้วยตนเอง เมื่อทำงานหากการอ้างอิงหายไปคุณจะได้รับข้อผิดพลาด (กล่าวถึงโดย@nextgentech )ความไว (กล่าวถึงโดยBen Hutchison ):
dependencies
ได้รับการติดตั้งแบบต่อเนื่อง: ถ้า A ต้องการ B และ B ต้องการ C ดังนั้น C จะได้รับการติดตั้งมิฉะนั้น B จะใช้งานไม่ได้และ A
devDependencies
ไม่ได้ติดตั้งแบบต่อเนื่อง เช่นเราไม่จำเป็นต้องทดสอบ B เพื่อทดสอบ A ดังนั้นการอ้างอิงการทดสอบของ B จึงถูกยกเลิก
ตัวเลือกที่เกี่ยวข้องไม่ได้กล่าวถึงที่นี่:
bundledDependencies
ซึ่งถูกกล่าวถึงในคำถามต่อไปนี้: ข้อดีของ bundledDependencies มากกว่าการอ้างอิงปกติใน NPMoptionalDependencies
(กล่าวถึงโดย Aidan Feldman )dependencies
จะต้องเรียกใช้devDependencies
เพื่อการพัฒนาเท่านั้นเช่น: การทดสอบหน่วย, การแพร่กระจาย CoffeeScript เป็น JavaScript, การลดขนาด, ...
หากคุณกำลังจะพัฒนาแพ็คเกจคุณดาวน์โหลดมัน (เช่นผ่านgit clone
) ไปที่รูทของมันซึ่งมีpackage.json
และรัน:
npm install
เนื่องจากคุณมีแหล่งที่มาจริงเป็นที่ชัดเจนว่าคุณต้องการที่จะพัฒนาดังนั้นโดยค่าเริ่มต้นทั้งสองdependencies
(เนื่องจากคุณต้องแน่นอนวิ่งไปสู่การพัฒนา) และdevDependency
ติดตั้งการอ้างอิง
อย่างไรก็ตามหากคุณเป็นเพียงผู้ใช้ที่ต้องการติดตั้งแพคเกจเพื่อใช้งานคุณจะทำจากไดเรกทอรีใด ๆ :
npm install "$package"
dependencies
ในกรณีที่คุณตามปกติไม่ต้องการพึ่งพาการพัฒนาเพื่อให้คุณเพียงแค่ได้รับสิ่งที่จำเป็นในการใช้แพคเกจ:
หากคุณต้องการติดตั้งแพ็กเกจการพัฒนาจริง ๆ ในกรณีนั้นคุณสามารถตั้งdev
ค่าตัวเลือกการกำหนดค่าtrue
เป็นได้จากบรรทัดคำสั่งเป็น:
npm install "$package" --dev
ตัวเลือกนี้เป็นfalse
ค่าเริ่มต้นเนื่องจากเป็นกรณีที่พบได้น้อยกว่ามาก
(ทดสอบก่อน 3.0)
ที่มา: https://nodejs.org/en/blog/npm/peer-dependencies/
ด้วยการอ้างอิงปกติคุณสามารถมีการพึ่งพาได้หลายเวอร์ชัน: มันเป็นการติดตั้งภายในnode_modules
การพึ่งพา
เช่นถ้าdependency1
และdependency2
ทั้งคู่ขึ้นอยู่กับdependency3
เวอร์ชันที่แตกต่างกันแผนผังโครงการจะมีลักษณะดังนี้:
root/node_modules/
|
+- dependency1/node_modules/
| |
| +- dependency3 v1.0/
|
|
+- dependency2/node_modules/
|
+- dependency3 v2.0/
อย่างไรก็ตามปลั๊กอินเป็นแพ็คเกจที่ปกติไม่ต้องการแพ็คเกจอื่นซึ่งเรียกว่าโฮสต์ในบริบทนี้ แทน:
เช่นถ้าdependency1
และdependency2
เพื่อนพึ่งdependency3
ต้นไม้โครงการจะมีลักษณะ:
root/node_modules/
|
+- dependency1/
|
+- dependency2/
|
+- dependency3 v1.0/
สิ่งนี้เกิดขึ้นแม้ว่าคุณจะไม่เคยพูดถึงdependency3
ในpackage.json
ไฟล์ของคุณ
ฉันคิดว่านี่เป็นตัวอย่างของรูปแบบการออกแบบInversion of Control
ตัวอย่างต้นแบบของการพึ่งพาเพียร์คือ Grunt โฮสต์และปลั๊กอิน
ตัวอย่างเช่นในปลั๊กอิน Grunt เช่นhttps://github.com/gruntjs/grunt-contrib-uglifyคุณจะเห็นว่า:
grunt
คือ peer-dependency
require('grunt')
ภายใต้เท่านั้นtests/
: โปรแกรมไม่ได้ใช้จริงจากนั้นเมื่อผู้ใช้จะใช้ปลั๊กอินเขาจะต้องมีปลั๊กอินGruntfile
โดยการเพิ่มgrunt.loadNpmTasks('grunt-contrib-uglify')
บรรทัด แต่ก็คือgrunt
ผู้ใช้จะโทรโดยตรง
สิ่งนี้จะไม่ทำงานถ้าปลั๊กอินแต่ละอันต้องการ Grunt เวอร์ชั่นที่แตกต่าง
ฉันคิดว่าเอกสารประกอบตอบคำถามได้ค่อนข้างดีบางทีคุณอาจไม่คุ้นเคยกับโหนด / ผู้จัดการแพ็คเกจอื่น ๆ ฉันอาจเข้าใจเพราะฉันรู้เพียงเล็กน้อยเกี่ยวกับ Ruby bundler
กุญแจสำคัญคือ:
สิ่งเหล่านี้จะถูกติดตั้งเมื่อทำการลิงก์ npm หรือการติดตั้ง npm จากรูทของแพ็คเกจและสามารถจัดการได้เหมือนกับพารามิเตอร์การกำหนดค่า npm อื่น ๆ ดู npm-config (7) สำหรับข้อมูลเพิ่มเติมในหัวข้อ
และภายใต้ npm-config (7) ค้นหาdev
:
Default: false
Type: Boolean
Install dev-dependencies along with packages.
npm install package
เป็นคำสั่งที่คุณใช้ในการติดตั้งแพคเกจทั้งหมดที่ไม่ได้พึ่งพาการพึ่งพามากกว่าสิ่งที่ฉันคิดว่าตอนนี้คุณหมายถึงซึ่งเป็น 'ติดตั้งแพคเกจที่เรียกว่า [แพคเกจ]' ซึ่งเป็นวิธีที่ฉันคิดว่ามันทำงาน ก่อนที่จะอ่านข้อความนี้ ถ้าฉันเป็นคุณฉันจะแก้ไขเพื่อบอกว่า [package-name] ซึ่งแสดงให้เห็นอย่างชัดเจนว่าสิ่งที่คุณหมายถึงคือ 'insert-name-here'
peerDependencies
พฤติกรรมที่เปลี่ยนแปลงใน npm @ 3 ที่จะเกิดขึ้น จากblog.npmjs.org/post/110924823920/npm-weekly-5 : "เราจะไม่ดาวน์โหลดการพึ่งพาเพียร์โดยอัตโนมัติอีกต่อไปแทนเราจะเตือนคุณหากการพึ่งพาเพียร์ยังไม่ได้ติดตั้งสิ่งนี้ต้องการคุณ เพื่อแก้ไขความขัดแย้งระหว่างเพื่อนด้วยตนเองด้วยตนเอง แต่ในระยะยาวสิ่งนี้จะทำให้โอกาสที่คุณจะลงเอยด้วยการขึ้นต่อกันของแพคเกจของคุณจะน้อยลง "
npm install
จากแพ็คเกจ A คุณจะได้รับ B และ C แต่ไม่ใช่ D
devDependencies
ยังไม่ได้ติดตั้งเมื่อมีการตั้งค่าNODE_ENV
production
หากคุณไม่ต้องการติดตั้ง devDependencies คุณสามารถใช้ npm install --production
--save
ตัวเลือกไม่จำเป็นอีกต่อไป หากคุณทำ "npm install my-package" มันจะเพิ่ม my-package เป็นการอ้างอิงในpackage.json
ไฟล์ของคุณ
เป็นตัวอย่างมอคค่าโดยปกติจะเป็นผู้อ้างอิงเนื่องจากการทดสอบไม่จำเป็นในการผลิตในขณะที่การแสดงจะเป็นการพึ่งพา
การอ้างอิงการ
พึ่งพาที่โครงการของคุณต้องการเรียกใช้เช่นไลบรารีที่มีฟังก์ชันที่คุณโทรจากรหัสของคุณ
มีการติดตั้งแบบเปลี่ยนผ่าน (หากขึ้นอยู่กับ B ขึ้นอยู่กับ C การติดตั้ง npm ใน A จะติดตั้ง B และ C)
ตัวอย่าง: lodash: โครงการของคุณเรียกบางฟังก์ชั่น lodash
devDependencies การ
พึ่งพาที่คุณต้องการในระหว่างการพัฒนาหรือการเปิดตัวเท่านั้นเช่นคอมไพเลอร์ที่ใช้รหัสของคุณและรวบรวมเป็นจาวาสคริปต์กรอบการทดสอบหรือเครื่องกำเนิดเอกสาร
พวกเขาไม่ได้ติดตั้งแบบต่อเนื่อง (ถ้าขึ้นอยู่กับ B dev-ขึ้นอยู่กับ C, การติดตั้ง NPM บน A จะติดตั้ง B เท่านั้น)
ตัวอย่าง: เสียงฮึดฮัด: โครงการของคุณใช้เสียงฮึดฮัดเพื่อสร้างตัวเอง
peerDependencies
Dependencies ที่โครงการของคุณเชื่อมโยงหรือแก้ไขในโครงการแม่มักจะเป็นปลั๊กอินสำหรับห้องสมุดหรือเครื่องมืออื่น ๆ มีวัตถุประสงค์เพียงเพื่อตรวจสอบให้แน่ใจว่าโครงการหลัก (โครงการที่จะขึ้นอยู่กับโครงการของคุณ) มีการพึ่งพาโครงการที่คุณขอ ดังนั้นหากคุณสร้างปลั๊กอิน C ที่เพิ่มฟังก์ชันการทำงานให้กับไลบรารี B ดังนั้นบางคนที่สร้างโครงการ A จะต้องมีการพึ่งพา B หากพวกเขามีการพึ่งพา C
พวกเขาไม่ได้ติดตั้ง (ยกเว้น npm <3) เท่านั้น ตรวจสอบแล้วสำหรับ
ตัวอย่าง: เสี้ยงฮึดฮัด: โครงการของคุณเพิ่มฟังก์ชันการทำงานเพื่อเสี้ยงฮึดฮัดแสดงความไม่พอใจและสามารถนำมาใช้เฉพาะในโครงการที่ใช้เสียงฮึดฮัด
เอกสารนี้อธิบายถึงการพึ่งพาของเพื่อนได้ดีมาก: https://nodejs.org/en/blog/npm/peer-dependencies/
นอกจากนี้เอกสาร npm ยังได้รับการปรับปรุงเมื่อเวลาผ่านไปและขณะนี้มีคำอธิบายที่ดีขึ้นเกี่ยวกับการพึ่งพาประเภทต่างๆ: https://github.com/npm/cli/blob/latest/doc/files/package.json.md#devdependencies
หากต้องการบันทึกแพ็กเกจไปยังpackage.jsonเป็นการอ้างอิง dev:
npm install "$package" --save-dev
เมื่อคุณเรียกnpm install
มันจะติดตั้งทั้งในและdevDependencies
dependencies
เพื่อหลีกเลี่ยงการติดตั้งdevDependencies
รัน:
npm install --production
มีบางโมดูลและแพ็คเกจที่จำเป็นสำหรับการพัฒนาเท่านั้นซึ่งไม่จำเป็นในการผลิต เหมือนที่มันบอกไว้ในเอกสารประกอบ :
หากมีใครบางคนกำลังวางแผนในการดาวน์โหลดและใช้โมดูลของคุณในโปรแกรมของพวกเขาพวกเขาอาจไม่ต้องการหรือจำเป็นต้องดาวน์โหลดและสร้างการทดสอบภายนอกหรือกรอบงานเอกสารที่คุณใช้ ในกรณีนี้เป็นการดีที่สุดที่จะแสดงรายการเพิ่มเติมเหล่านี้ในแฮชการอ้างอิง
คำอธิบายง่ายๆที่ทำให้ฉันชัดเจนยิ่งขึ้นคือ:
เมื่อคุณปรับใช้แอพของคุณจำเป็นต้องติดตั้งโมดูลในการพึ่งพามิฉะนั้นแอพของคุณจะไม่ทำงาน โมดูลใน devDependencies ไม่จำเป็นต้องติดตั้งบนเซิร์ฟเวอร์ที่ใช้งานจริงเนื่องจากคุณไม่ได้พัฒนาบนเครื่องนั้น ลิงค์
vendor.js
, deps ทั้งหมดของเราควร dev dep ถ้ารหัสคอมไพล์มีการมุ่งมั่นใน repo? และมันก็ควรจะถูกคอมมิชชันเพราะมันแปลกที่คุณต้องคอมไพล์โมดูลไม่ใช่แค่ติดตั้ง (และการทดสอบก็อยู่ที่นี่เพราะการเปลี่ยนแปลงของ submodules สามารถนำไปสู่การถดถอย) ...
webpack -p
ฉันหมายถึง โปรดตอบคำถามของฉัน
ฉันต้องการที่จะเพิ่มคำตอบในมุมมองของฉันเกี่ยวกับคำอธิบายการพึ่งพาเหล่านี้
dependencies
ใช้สำหรับการใช้งานโดยตรงใน codebase ของคุณสิ่งที่มักจะจบลงด้วยรหัสการผลิตหรือชิ้นส่วนของรหัสdevDependencies
ใช้สำหรับกระบวนการสร้างเครื่องมือที่ช่วยให้คุณจัดการวิธีที่รหัสท้ายจะสิ้นสุดลงโมดูลทดสอบของบุคคลที่สาม (เช่นเนื้อหาเว็บแพ็ค)ในระยะสั้น
การอ้างอิง - npm install <package> --save-prod
ติดตั้งแพ็กเกจที่แอปพลิเคชันของคุณต้องการในสภาพแวดล้อมการผลิต
DevDependencies - npm install <package> --save-dev
ติดตั้งแพคเกจที่จำเป็นสำหรับการพัฒนาและการทดสอบในท้องถิ่นเท่านั้น
เพียงพิมพ์npm install
ติดตั้งแพ็คเกจทั้งหมดที่กล่าวถึงใน package.json
ดังนั้นหากคุณกำลังทำงานกับเครื่องคอมพิวเตอร์ของคุณเพียงแค่พิมพ์npm install
และดำเนินการต่อ :)
peerDependencies
ไม่ค่อยมีเหตุผลสำหรับฉันจนกว่าฉันจะอ่านตัวอย่างนี้จากโพสต์บล็อกในหัวข้อCiro ดังกล่าวข้างต้น :
สิ่งที่ [ ปลั๊กอิน ] ต้องการคือวิธีการแสดง "การพึ่งพา" เหล่านี้ระหว่างปลั๊กอินและโฮสต์แพ็กเกจ วิธีการพูดบางอย่าง“ ฉันจะทำงานเฉพาะเมื่อเสียบเข้ากับแพ็คเกจโฮสต์ของฉันเวอร์ชัน 1.2.x เท่านั้นดังนั้นหากคุณติดตั้งฉันต้องแน่ใจว่ามันอยู่ข้างโฮสต์ที่เข้ากันได้” เราเรียกว่าความสัมพันธ์นี้เป็นการพึ่งพาจากเพื่อน
peerDependencies
สำหรับปลั๊กอินไลบรารีที่ต้องใช้ไลบรารี "โฮสต์" เพื่อทำงานของฟังก์ชัน แต่อาจถูกเขียนขึ้นก่อนหน้านี้ที่โฮสต์รุ่นล่าสุดจะวางจำหน่าย
นั่นคือถ้าผมเขียนPluginX v1
สำหรับHostLibraryX v3
และเดินออกไปไม่มีการรับประกันPluginX v1
จะทำงานเมื่อHostLibraryX v4
(หรือแม้กระทั่งHostLibraryX v3.0.1
) จะถูกปล่อยออก
จากมุมมองของปลั๊กอินจะเพิ่มเฉพาะฟังก์ชั่นในไลบรารีโฮสต์ ฉันไม่ต้องการ "โฮสต์" เพื่อเพิ่มการพึ่งพาปลั๊กอินและปลั๊กอินมักไม่ได้ขึ้นอยู่กับโฮสต์ของพวกเขา หากคุณไม่มีโฮสต์ปลั๊กอินจะไม่ทำอันตรายอะไรเลย
นี่หมายความว่าdependencies
ไม่ใช่แนวคิดที่ถูกต้องสำหรับปลั๊กอิน
ยิ่งแย่ไปกว่านั้นหากโฮสต์ของฉันได้รับการปฏิบัติเหมือนเป็นผู้พึ่งพาเราจะจบลงในสถานการณ์นี้ซึ่งโพสต์บล็อกเดียวกันพูดถึง (แก้ไขเล็กน้อยเพื่อใช้โฮสต์ & ปลั๊กอินที่สร้างขึ้นจากคำตอบนี้):
แต่ตอนนี้ [ถ้าเราถือว่า HostLibraryX เวอร์ชันร่วมสมัยเป็นการอ้างอิงสำหรับ PluginX] แสดง
npm install
ผลในกราฟการพึ่งพาที่ไม่คาดคิดของ├── HostLibraryX@4.0.0 └─┬ PluginX@1.0.0 └── HostLibraryX@3.0.0
ฉันจะปล่อยให้ความล้มเหลวเล็กน้อยที่มาจากปลั๊กอินโดยใช้ [HostLibraryX] API ที่แตกต่างจากแอปพลิเคชันหลักในจินตนาการของคุณ
... นั่นคือจุดรวมทั้งหมดของปลั๊กอิน ตอนนี้ถ้าโฮสต์ดีพอที่จะรวมข้อมูลการพึ่งพาสำหรับปลั๊กอินทั้งหมดของมันนั่นจะช่วยแก้ปัญหาได้ แต่นั่นก็จะนำเสนอปัญหาทางวัฒนธรรมใหม่ ๆเช่นการจัดการปลั๊กอิน!
จุดทั้งหมดของปลั๊กอินคือพวกเขาสามารถจับคู่โดยไม่ระบุชื่อ ในโลกที่สมบูรณ์แบบการมีโฮสต์จัดการ 'em ทั้งหมดจะเป็นระเบียบเรียบร้อย แต่เราจะไม่ต้องใช้ห้องสมุดแมวฝูง
แต่เรามีแนวคิดของการเป็นเพื่อนร่วมงาน โฮสต์หรือปลั๊กอินไม่อยู่ในที่ฝากข้อมูลการอ้างอิงของอีกรายการ ทั้งคู่อาศัยอยู่ในระดับเดียวกันของกราฟการพึ่งพา
ถ้าฉันPluginX v1
และคาดหวังเพื่อนของ (นั่นคือมีเพื่อนพึ่งพา ) HostLibraryX v3
ฉันจะพูดอย่างนั้น หากคุณได้อัปเกรดอัตโนมัติล่าสุดHostLibraryX v4
(หมายเหตุว่ารุ่นของ4 ) และมีการPlugin v1
ติดตั้งคุณจำเป็นต้องรู้ใช่มั้ย?
npm
ไม่สามารถจัดการสถานการณ์นี้ให้ฉันได้ -
"เฮ้ฉันเห็นว่าคุณกำลังใช้อยู่
PluginX v1
! ฉันกำลังลดระดับรุ่นHostLibraryX
จาก v4 เป็น v3 โดยอัตโนมัติหรือไม่"
... หรือ...
"เฮ้ฉันเห็นว่าคุณกำลังใช้งาน
PluginX v1
อยู่ซึ่งคาดว่าHostLibraryX v3
คุณจะทิ้งฝุ่นไว้ในระหว่างการอัปเดตครั้งล่าสุดเพื่อความปลอดภัยฉันจะถอนการติดตั้งโดยอัตโนมัติPlugin v1
!! 1!
ไม่เป็นไรครับ!
ดังนั้น npm ไม่ได้ มันเตือนคุณถึงสถานการณ์และช่วยให้คุณคิดออกว่าเป็นเพียร์เหมาะสำหรับHostLibraryX v4
Plugin v1
ที่ดีpeerDependency
ในการจัดการปลั๊กอินจะทำให้การทำงานของแนวคิดนี้ขึ้นอย่างสังหรณ์ใจในการปฏิบัติ จากโพสต์บล็อกอีกครั้ง ...
คำแนะนำหนึ่งข้อ: ข้อกำหนดการพึ่งพาจากเพื่อนซึ่งแตกต่างจากการอ้างอิงปกติควรผ่อนปรน คุณไม่ควรล็อคการพึ่งพาเพื่อนของคุณลงในเวอร์ชันแพทช์เฉพาะ มันจะน่ารำคาญจริง ๆ หากปลั๊กอินของชัยหนึ่งเพียร์ขึ้นอยู่กับชัย 1.4.1 ในขณะที่อีกปลั๊กอินขึ้นอยู่กับชัย 1.5.0 เพียงเพราะผู้เขียนขี้เกียจและไม่ได้ใช้เวลาในการหาเวอร์ชั่นขั้นต่ำที่แท้จริงของพวกเขาชัย เข้ากันได้กับ
การพึ่งพา VS การพึ่งพาการพัฒนา
Dev dependencies เป็นโมดูลที่จำเป็นเฉพาะในระหว่างการพัฒนาในขณะที่จำเป็นต้องพึ่งพาที่รันไทม์ หากคุณกำลังปรับใช้แอปพลิเคชันของคุณจะต้องติดตั้งการพึ่งพามิฉะนั้นแอปของคุณจะไม่ทำงาน ไลบรารี่ที่คุณโทรจากรหัสของคุณซึ่งทำให้โปรแกรมสามารถเรียกใช้ได้นั้นจะถือว่าเป็นการอ้างอิง
เช่น - ทำปฏิกิริยา, ทำปฏิกิริยา - dom
ไม่จำเป็นต้องติดตั้งโมดูลการพึ่งพาของ Dev ในเซิร์ฟเวอร์ที่ใช้งานจริงเนื่องจากคุณจะไม่พัฒนาในเครื่อง. com ที่มีรหัสลับจาวาสคริปต์การทดสอบเฟรมเวิร์ก
เช่น - ESLint, Babel, webpack
@FYI,
mod-a
dev-dependents:
- mod-b
dependents:
- mod-c
mod-d
dev-dependents:
- mod-e
dependents:
- mod-a
----
npm install mod-d
installed modules:
- mod-d
- mod-a
- mod-c
----
checkout the mod-d code repository
npm install
installed modules:
- mod-a
- mod-c
- mod-e
หากคุณกำลังเผยแพร่ไปยัง npm เป็นสิ่งสำคัญที่คุณต้องใช้การตั้งค่าสถานะที่ถูกต้องสำหรับโมดูลที่ถูกต้อง หากเป็นสิ่งที่โมดูล npm ของคุณต้องการใช้งานให้ใช้แฟล็ก "--save" เพื่อบันทึกโมดูลเป็นการพึ่งพา หากเป็นสิ่งที่โมดูลของคุณไม่จำเป็นต้องใช้งาน แต่จำเป็นสำหรับการทดสอบให้ใช้แฟล็ก "--save-dev"
# For dependent modules
npm install dependent-module --save
# For dev-dependent modules
npm install development-module --save-dev
เมื่อพยายามที่จะกระจายแพคเกจ NPM dependencies
ที่คุณควรหลีกเลี่ยงการใช้ แต่คุณต้องพิจารณาเพิ่มมันเข้าไปในหรือเอาออกจากpeerDependencies
dependencies
ฉันพบคำอธิบายง่ายๆ
คำตอบสั้น ๆ :
การอ้างอิง "... คือสิ่งที่โครงการของคุณต้องการเพื่อให้สามารถทำงานในการผลิตจริง ๆ "
devDependencies "... เป็นสิ่งที่คุณต้องการในระหว่างการพัฒนา"
peerDependencies "ถ้าคุณต้องการสร้างและเผยแพร่ไลบรารี่ของคุณเองเพื่อให้สามารถใช้เป็นอ้างอิงได้"
รายละเอียดเพิ่มเติมในโพสต์นี้: https://code-trotter.com/web/dependencies-vs-devdependencies-vs-peerdependencies
optionalDependencies
ตอนนี้