เมื่อใดควรใช้ Yarn ผ่าน NPM? อะไรคือความแตกต่าง?


107

อะไรคือความแตกต่างระหว่างYarnและ NPM? ในขณะที่เขียนคำถามนี้ฉันสามารถค้นหาบทความบางอย่างเกี่ยวกับการแสดงอินเทอร์เน็ตสิ่งที่เปรียบเสมือนเส้นด้ายของคำสั่ง NPM เช่นนี้

พวกเขามีฟังก์ชันการทำงานเหมือนกันหรือไม่ (ฉันรู้ว่า Yarn ทำแคชในเครื่องและดูเหมือนว่าคุณจะต้องดาวน์โหลดแพ็คเกจเพียงครั้งเดียว) แต่นอกเหนือจากนี้มีประโยชน์อะไรบ้างสำหรับการย้ายจาก NPM ไปยัง Yarn


12
นี่ไม่ใช่คำถามที่ไม่ดีและไม่สมควรได้รับการโหวตลดลง ที่กล่าวว่าจำเป็นต้องมีเนื้อละเอียดเล็กน้อยเพื่อให้เป็นคำถามที่ดีอย่างแท้จริง
jedd.ahyoung

รวดเร็วของ Google จะเปิดขึ้นนี้ ฉันเชื่อว่าสิ่งนี้อาจกว้างเกินไป / ไม่สร้างสรรค์สำหรับ StackOverflow และสามารถทำได้ด้วยการวิจัยเพิ่มเติมอีกเล็กน้อย
Aurora0001

1
@ Aurora0001 เมื่อฉันค้นหาฉันเห็น cheatsheet แต่นั่นไม่ใช่คำตอบสำหรับคำถามของฉัน! ฉันต้องการทราบความแตกต่างระหว่างทั้งสองและไม่ใช่ความแตกต่างระหว่างคำสั่ง โปรดอ่านคำถามของฉันก่อน
Asha

4
@Asha คุณควรแก้ไขคำถามของคุณให้มีความเฉพาะเจาะจงมากขึ้นและแสดงสิ่งที่คุณได้ค้นคว้าไปแล้ว คุณกำลังมองหาความแตกต่างแบบไหน? คุณกำลังพยายามค้นหาวิธีการใช้งานไลบรารีหรือไม่? คุณกำลังพยายามค้นหาว่าความแตกต่างในการเข้าถึงปัญหาหรือไม่? หากคุณตั้งคำถามให้แม่นยำขึ้นอาจเป็นเรื่องดีขึ้นอยู่กับสิ่งที่คุณกำลังถาม (ขึ้นอยู่กับสิ่งที่คุณต้องการข้อมูลอาจมีอยู่แล้วใน Google)
jedd.ahyoung

3
คนตลกบอกให้คุณใช้ Google ฉันพบว่าคำถามของคุณกำลังจะไปที่ google ... คนใน stackoverflow ชอบออกกฎมากเกินไปราวกับว่ามันจะทำให้พวกเขามีความสำคัญมากขึ้นฉันเดา
jairhumberto

คำตอบ:


72

UPDATE: มีนาคม 2561 (ช้าไปหน่อย ... )

ตั้งแต่รุ่น 5 npm

  • สร้าง 'lockfile' ที่เรียกpackage-lock.jsonว่าแก้ไขโครงสร้างการพึ่งพาทั้งหมดของคุณในลักษณะเดียวกับที่กลไกการล็อคเส้นด้าย (หรืออื่น ๆ ) ทำ
  • มีการสร้างเครื่องมือ
  • --save ตอนนี้เป็นนัยสำหรับ npm i
  • การใช้งานเครือข่ายและแคชที่ดีขึ้น

NPM 5.7.0 เพิ่มเติมแนะนำnpm ciคำสั่งในการติดตั้งการอ้างอิงได้รวดเร็วยิ่งขึ้นในสภาพแวดล้อมที่บูรณาการอย่างต่อเนื่องโดยเฉพาะการติดตั้งแพคเกจที่พบในpackage-lock.json(รายงานข้อผิดพลาดถ้าpackage-lock.jsonและpackage.jsonไม่ตรงกัน)

ส่วนตัวผมยังใช้npm.


ต้นฉบับ

ฉันเกลียดที่จะอ้างจากเอกสารโดยตรง แต่พวกเขาทำงานได้ดีมากในการอธิบายว่าเหตุใดอย่างรัดกุมเพียงพอที่ฉันไม่เห็นวิธีสรุปแนวคิดเพิ่มเติม

ส่วนใหญ่:

  1. คุณรู้อยู่เสมอว่าคุณได้รับสิ่งเดียวกันในทุกเครื่องพัฒนา

  2. มันทำให้การดำเนินการที่npmไม่เป็นอัมพาตและ

  3. ทำให้การใช้งานเครือข่ายมีประสิทธิภาพมากขึ้น

  4. อาจทำให้การใช้ทรัพยากรระบบอื่น ๆ (เช่น RAM)มีประสิทธิภาพมากขึ้นเช่นกัน

ประสบการณ์การผลิตของผู้คนมีอะไรบ้าง? ใครจะรู้ว่ามันเป็นเด็กทารกของคนทั่วไป

TL; DR จาก Yehuda Katz :

จาก get-go ไฟล์ล็อก Yarn รับประกันว่าการรันเส้นด้ายซ้ำ ๆ บนที่เก็บเดียวกันจะทำให้เกิดแพ็กเกจเดียวกัน

ประการที่สอง Yarn พยายามที่จะมีประสิทธิภาพที่ดีด้วยแคชเย็น แต่โดยเฉพาะอย่างยิ่งกับแคชที่อบอุ่น

ในที่สุดเส้นด้ายทำให้ความปลอดภัยเป็นค่านิยมหลัก

โพสต์บล็อกที่ดี

NPM vs Yarn Cheat Sheet ” โดย Gant Laborde

เวอร์ชันที่ยาวขึ้นเล็กน้อยจากโครงการ :

รวดเร็ว: เส้นด้ายแคชทุกแพ็คเกจที่ดาวน์โหลดดังนั้นจึงไม่จำเป็นต้องใช้อีก นอกจากนี้ยังขนานการดำเนินการเพื่อเพิ่มการใช้ทรัพยากรให้สูงสุดเวลาในการติดตั้งจึงเร็วกว่าที่เคย

เชื่อถือได้: การใช้รูปแบบไฟล์ล็อกที่ละเอียด แต่กระชับและอัลกอริธึมที่กำหนดไว้สำหรับการติดตั้ง Yarn สามารถรับประกันได้ว่าการติดตั้งที่ทำงานบนระบบหนึ่งจะทำงานในลักษณะเดียวกันกับระบบอื่น ๆ

ปลอดภัย: เส้นด้ายใช้เช็คซัมเพื่อตรวจสอบความสมบูรณ์ของทุกแพ็คเกจที่ติดตั้งก่อนที่จะเรียกใช้โค้ด

และจากREADME.md :

  • โหมดออฟไลน์: หากคุณเคยติดตั้งแพ็คเกจมาก่อนคุณสามารถติดตั้งได้อีกครั้งโดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต
  • กำหนด: การอ้างอิงเดียวกันจะได้รับการติดตั้งในลักษณะเดียวกันในทุกเครื่องโดยไม่คำนึงถึงลำดับการติดตั้ง
  • ประสิทธิภาพของเครือข่าย: Yarn จัดคิวคำขอได้อย่างมีประสิทธิภาพและหลีกเลี่ยงน้ำตกคำขอเพื่อเพิ่มการใช้งานเครือข่ายให้สูงสุด
  • การลงทะเบียนหลายรายการ: ติดตั้งแพ็คเกจใดก็ได้จาก npm หรือ Bower และทำให้ขั้นตอนการทำงานของแพ็กเกจเหมือนเดิม
  • ความยืดหยุ่นของเครือข่าย: การร้องขอเพียงครั้งเดียวที่ล้มเหลวจะไม่ทำให้การติดตั้งล้มเหลว คำขอจะถูกลองอีกครั้งเมื่อล้มเหลว
  • Flat Mode: แก้ไขเวอร์ชันที่ไม่ตรงกันของการอ้างอิงเป็นเวอร์ชันเดียวเพื่อหลีกเลี่ยงการสร้างรายการที่ซ้ำกัน
  • อิโมจิเพิ่มเติม 🐈

คุณบอกได้ไหมว่าเส้นด้ายทำการแก้ปัญหาการพึ่งพาเช่น npm v3หรือไม่ ? ฉันเข้าใจว่ามี--flatตัวเลือกที่บังคับให้โครงสร้างแบนจริงซึ่งอนุญาตให้ติดตั้งการพึ่งพาแต่ละเวอร์ชันได้เพียงเวอร์ชันเดียว แต่พฤติกรรมเริ่มต้นของสิ่งนี้คืออะไร ขอบคุณ.
Dimitris Karagiannis

2
อิโมจิเพิ่มเติม: cat:
Huei Tan

7
คำตอบที่ยอดเยี่ยม ฉันสงสัยว่าพวกเขาพยายามมีส่วนร่วมใน npm ก่อนที่จะฟอร์กและเปลี่ยนชื่อและเปลี่ยนไวยากรณ์ของinstall -g.
Gardner Bickford

โพสต์ที่ดีมาก scotch.io/tutorials/…
Akshay Vijay Jain

3

PNPM คืออะไร?

pnpmใช้ฮาร์ดลิงก์และซิมลิงค์เพื่อบันทึกเวอร์ชันหนึ่งของโมดูลเพียงครั้งเดียวบนดิสก์ เมื่อใช้ npm หรือ Yarn เช่นหากคุณมี 100 โปรเจ็กต์ที่ใช้ lodash เวอร์ชันเดียวกันคุณจะมี 100 สำเนาของ lodash บนดิสก์ ด้วย pnpm lodash จะถูกบันทึกไว้ในที่เดียวบนดิสก์และฮาร์ดลิงก์จะใส่ลงใน node_modules ที่ควรติดตั้ง

เป็นผลให้คุณประหยัดพื้นที่กิกะไบต์ในดิสก์ของคุณและคุณติดตั้งได้เร็วขึ้นมาก! หากคุณต้องการรายละเอียดเพิ่มเติมเกี่ยวกับโครงสร้าง node_modules เฉพาะที่ pnpm สร้างขึ้นและเหตุใดจึงทำงานได้ดีกับระบบนิเวศ Node.js โปรดอ่านบทความเล็ก ๆ นี้: ทำไมเราจึงควรใช้ pnpm

วิธีการติดตั้ง PNPM

npm install -g pnpm

จะติดตั้งแพ็คเกจ npm โดยใช้ PNPM ได้อย่างไร

pnpm install -g typescript // or your desired package

ประโยชน์ของPNPMมากกว่าYarnและNPM

นี่คือความคืบหน้าบาร์แสดงเวลาการติดตั้งดำเนินการโดยNPM, YARNและPNPM(สั้นบาร์จะดีกว่า) ป้อนคำอธิบายภาพที่นี่

คลิกเพื่อตรวจสอบเกณฑ์มาตรฐานที่สมบูรณ์

ดูรายละเอียดเพิ่มเติมได้ที่https://www.npmjs.com/package/pnpm


2

npm :

  1. ตัวจัดการแพ็คเกจสำหรับ JavaScript npm คืออินเทอร์เฟซบรรทัดคำสั่งไปยังระบบนิเวศ npm ได้รับการทดสอบการต่อสู้ยืดหยุ่นอย่างน่าประหลาดใจและนักพัฒนา JavaScript หลายแสนคนใช้ทุกวัน
  2. NPM สร้างไฟล์ล็อคที่ถูกต้องในขณะที่ไฟล์ล็อค Yarn อาจเสียหายได้ในบางกรณีและต้องได้รับการแก้ไขด้วยเครื่องมือเส้นด้าย

เส้นด้าย :

  1. ตัวจัดการแพ็คเกจใหม่สำหรับ JavaScript เส้นด้ายแคชทุกแพ็คเกจที่ดาวน์โหลดดังนั้นจึงไม่จำเป็นต้องใช้อีก นอกจากนี้ยังขนานการดำเนินการเพื่อเพิ่มการใช้ทรัพยากรให้สูงสุดเวลาในการติดตั้งจึงเร็วกว่าที่เคย
  2. Yarn ไม่รองรับการเข้าสู่ระบบด้วยรหัสผ่าน (ในขณะที่ NPM ทำ)

1
ล็อกอินแบบไหน?
Rich Stone

1

เมื่อคุณติดตั้งแพคเกจโดยใช้เส้นด้าย (ใช้แพคเกจเส้นด้ายเพิ่ม) ก็วางแพคเกจบนฮาร์ดดิสก์ของคุณ ในระหว่างการติดตั้งครั้งต่อไปแพคเกจนี้จะถูกใช้แทนการส่งคำขอ HTTP เพื่อรับ tarball จากรีจิสทรี

เส้นด้ายมาพร้อมกับตัวตรวจสอบใบอนุญาตที่ใช้งานง่ายซึ่งจะมีประสิทธิภาพมากในกรณีที่คุณต้องตรวจสอบใบอนุญาตของโมดูลทั้งหมดที่คุณขึ้นอยู่

หากคุณกำลังทำงานกับซอฟต์แวร์ที่เป็นกรรมสิทธิ์ไม่สำคัญว่าคุณจะใช้ซอฟต์แวร์ใด ด้วย npm คุณสามารถใช้ npm-shrinkwrap.js ในขณะที่คุณสามารถใช้ yarn.lock กับ Yarn

สำหรับข้อมูลเพิ่มเติมโปรดอ่านบล็อกต่อไปนี้

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/


1

พยายามให้ภาพรวมที่ดีขึ้นสำหรับผู้เริ่มต้น

npmเป็นตัวจัดการแพ็คเกจที่ได้รับความนิยมมากที่สุดในอดีตสำหรับ JavaScript หากคุณต้องการใช้เพื่อจัดการการอ้างอิงของโปรเจ็กต์ของคุณคุณสามารถพิมพ์คำสั่งต่อไปนี้:

npm init

สิ่งนี้จะสร้างpackage.jsonไฟล์ ประกอบด้วยการอ้างอิงทั้งหมดของโครงการ

แล้ว

npm install

จะสร้างไดเร็กทอรีnode_modulesและดาวน์โหลดการอ้างอิง (ที่คุณเพิ่มลงในpackage.jsonไฟล์) ภายใน

นอกจากนี้ยังจะสร้างpackage-lock.jsonไฟล์ ไฟล์นี้ใช้เพื่ออธิบายโครงสร้างของการพึ่งพาที่สร้างขึ้น ช่วยให้ผู้พัฒนาสามารถติดตั้งการอ้างอิงเดียวกันได้ ตัวอย่างเช่นคุณอาจจินตนาการได้ว่าผู้พัฒนากำลังอัปเกรดการอ้างอิงเป็น v2 แล้วจากนั้น v3 ในขณะที่อีกคนหนึ่งอัปเกรดเป็น v3 โดยตรง

NPMติดตั้งการอ้างอิงในความหมายที่ไม่ deterministically วิธีที่สอง developper อาจมีแตกต่างกันnode_modulesไดเรกทอรีผลในการเข้าพฤติกรรมที่แตกต่างกัน ** npm ได้รับความเสียหายจากชื่อเสียงที่ไม่ดีเช่นในเดือนกุมภาพันธ์ 2018: พบปัญหาในเวอร์ชัน 5.7.0 ซึ่งการเรียกใช้ sudo npm บนระบบ Linux จะเปลี่ยนความเป็นเจ้าของไฟล์ระบบและทำลายระบบปฏิบัติการอย่างถาวร

เมื่อต้องการแก้ไขปัญหาเหล่านั้นและคนอื่น ๆที่ Facebook แนะนำผู้จัดการแพคเกจใหม่ (2016): เส้นด้ายเร็วขึ้นปลอดภัยมากขึ้นและน่าเชื่อถือมากขึ้นแพคเกจผู้จัดการ JavaScript

คุณสามารถเพิ่มYarnในโปรเจ็กต์ได้โดยพิมพ์:

yarn init

เพื่อสร้างpackage.jsonไฟล์ จากนั้นติดตั้งการอ้างอิงด้วย:

yarn install

โฟลเดอร์node_modulesจะถูกสร้างขึ้น เส้นด้ายจะสร้างไฟล์ชื่อyarn.lock. ไฟล์นี้มีจุดประสงค์เดียวกับไฟล์package-lock.jsonแต่ถูกสร้างขึ้นโดยใช้อัลกอริธึมที่กำหนดและเชื่อถือได้ซึ่งนำไปสู่การสร้างที่สอดคล้องกัน

หากคุณเริ่มโปรเจ็กต์ด้วยnpmคุณสามารถย้ายไปยังYarnได้อย่างง่ายดาย package.jsonเส้นด้ายจะใช้เหมือนกัน ดูการย้ายข้อมูลจาก npmสำหรับรายละเอียดเพิ่มเติม

อย่างไรก็ตามNPMได้รับการปรับปรุงให้ดีขึ้นกับแต่ละรุ่นใหม่และบางโครงการยังคงใช้NPMกว่าเส้นด้าย


1

คำตอบของ @msanford ครอบคลุมเกือบทุกอย่าง แต่ฉันไม่มีส่วนความปลอดภัย (ช่องโหว่ที่รู้จักของ OWASP)

เส้นด้าย

คุณสามารถตรวจสอบได้โดยใช้yarn auditแต่คุณไม่สามารถแก้ไขได้ ปัญหานี้ยังคงเป็นปัญหาที่เปิดอยู่ใน GitHub ( https://github.com/yarnpkg/yarn/issues/7075 )

npm

คุณสามารถใช้ได้npm audit fixดังนั้นบางส่วนคุณสามารถแก้ไขได้ด้วยตัวเอง

ทั้งสองอย่างคือnpm audit& yarn auditมีเครื่องมือบูรณาการอย่างต่อเนื่องของตัวเอง ตามลำดับhttps://github.com/IBM/audit-ci (ใช้แล้วใช้งานได้ดี!) และhttps://yarnpkg.com/package/audit-ci (ยังไม่ได้ใช้)

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