Khi nào sử dụng Yarn qua NPM? Sự khác biệt là gì?


101

Sự khác biệt giữa Yarn và NPM là gì? Tại thời điểm viết câu hỏi này, tôi chỉ có thể tìm thấy một số bài báo trên Internet cho thấy Yarn tương đương với lệnh NPM như thế này là gì .

Chúng có các chức năng giống nhau không (tôi biết Yarn có bộ nhớ đệm cục bộ và có vẻ như bạn chỉ cần tải xuống một gói một lần) nhưng ngoài điều này thì có bất kỳ lợi ích nào khi chuyển từ NPM sang Yarn không?


11
Đây không phải là một câu hỏi tồi và không đáng nhận được sự ủng hộ. Điều đó nói rằng, nó cần phải được bổ sung một chút để biến nó thành một câu hỏi thực sự hay.
jedd.ahyoung 13/10/16

Google nhanh chóng đưa ra điều này . Tôi tin rằng điều này có lẽ quá rộng / không mang tính xây dựng đối với StackOverflow và dù sao thì cũng có thể làm được với một số nghiên cứu khác.
Aurora0001

1
@ Aurora0001 khi tôi tìm kiếm, tôi đã thấy bảng gian lận nhưng đó không phải là câu trả lời cho câu hỏi của tôi! Tôi muốn biết sự khác biệt giữa hai và không khác biệt giữa các lệnh. Vui lòng đọc câu hỏi của tôi đầu tiên
Asha

4
@Asha Bạn nên chỉnh sửa câu hỏi của mình để có thêm chi tiết cụ thể và hiển thị những gì bạn đã nghiên cứu. Bạn đang tìm kiếm sự khác biệt nào? Bạn đang cố gắng tìm hiểu cách các thư viện được triển khai? Bạn đang cố gắng tìm hiểu xem chúng khác nhau như thế nào trong cách tiếp cận vấn đề? Nếu bạn làm cho câu hỏi của mình chính xác hơn, nó có thể tốt, tùy thuộc vào những gì bạn đang hỏi. (Tùy thuộc vào những gì bạn đang hỏi, thông tin có thể đã có sẵn trên Google.)
jedd.ahyoung 13/10/16

3
những người vui tính bảo bạn hãy google nó; Tôi thấy câu hỏi của bạn được đưa lên google ... những người trong stackoverflow thích loại trừ quá mức mọi thứ, như thể nó sẽ khiến chúng quan trọng hơn, tôi đoán vậy.
jairhumberto

Câu trả lời:


68

CẬP NHẬT: Tháng 3 năm 2018 (hơi muộn ...)

Kể từ phiên bản 5, npm

  • tạo một 'tập tin khóa' được gọi là package-lock.jsonsửa chữa toàn bộ cây phụ thuộc của bạn giống như cách cơ chế khóa sợi (hoặc bất kỳ thứ gì khác) thực hiện,
  • Một công cụ đã được thực hiện
  • --save bây giờ được ngụ ý cho npm i
  • Sử dụng mạng và bộ nhớ đệm tốt hơn

NPM 5.7.0 tiếp tục giới thiệu các npm cilệnh để cài đặt phụ thuộc một cách nhanh chóng hơn trong một môi trường tích hợp liên tục bằng cách chỉ cài đặt các gói được tìm thấy trong package-lock.json(báo cáo lỗi nếu package-lock.jsonpackage.jsonchưa đồng bộ).

Riêng tôi, tôi vẫn sử dụng npm.


Nguyên

Tôi không thích trích dẫn trực tiếp từ các tài liệu, nhưng họ đã làm rất tốt việc giải thích lý do tại sao, đủ ngắn gọn khiến tôi không biết cách nào để tóm tắt thêm các ý tưởng.

Lớn hơn:

  1. Bạn luôn biết rằng bạn đang nhận được cùng một thứ trên mọi máy phát triển

  2. Nó phân tích các thao tác npmkhông và

  3. Nó làm cho việc sử dụng mạng hiệu quả hơn.

  4. Nó cũng có thể sử dụng hiệu quả hơn các tài nguyên hệ thống khác (chẳng hạn như RAM) .

Kinh nghiệm sản xuất của mọi người với nó là gì? Ai biết được, đó là một đứa trẻ sơ sinh đối với công chúng.

TL; DR từ Yehuda Katz :

Ngay từ khi bắt đầu, Yarn lockfile đảm bảo rằng việc chạy lặp lại sợi trên cùng một kho lưu trữ sẽ dẫn đến các gói giống nhau.

Thứ hai, Yarn cố gắng để có hiệu suất tốt, với bộ đệm lạnh, nhưng đặc biệt là với bộ đệm ấm.

Cuối cùng, Yarn làm cho bảo mật trở thành giá trị cốt lõi.

Bài blog hay

NPM vs Yarn Cheat Sheet ” của Gant Laborde

Phiên bản dài hơn một chút từ dự án :

Nhanh chóng: Yarn lưu trữ mọi gói mà nó tải xuống để không bao giờ cần phải tải lại. Nó cũng song song hoạt động để tối đa hóa việc sử dụng tài nguyên để thời gian cài đặt nhanh hơn bao giờ hết.

Đáng tin cậy: Sử dụng định dạng tệp khóa chi tiết, nhưng ngắn gọn và thuật toán xác định cho các lượt cài đặt, Yarn có thể đảm bảo rằng bản cài đặt hoạt động trên một hệ thống sẽ hoạt động giống hệt như trên bất kỳ hệ thống nào khác.

An toàn: Yarn sử dụng tổng kiểm tra để xác minh tính toàn vẹn của mọi gói được cài đặt trước khi mã của nó được thực thi.

Và từ README.md :

  • Chế độ ngoại tuyến: Nếu bạn đã cài đặt một gói trước đó, bạn có thể cài đặt lại mà không cần kết nối internet.
  • Xác định: Các phần phụ thuộc giống nhau sẽ được cài đặt theo cùng một cách chính xác trên mọi máy tính bất kể thứ tự cài đặt.
  • Hiệu suất mạng: Yarn sắp xếp các yêu cầu một cách hiệu quả và tránh thác nước yêu cầu để tối đa hóa việc sử dụng mạng.
  • Nhiều đăng ký: Cài đặt bất kỳ gói nào từ npm hoặc Bower và giữ nguyên quy trình làm việc của gói.
  • Khả năng phục hồi mạng: Một yêu cầu không thành công sẽ không làm cho quá trình cài đặt không thành công. Yêu cầu được thử lại khi không thành công.
  • Chế độ phẳng: Giải quyết các phiên bản phụ thuộc không khớp thành một phiên bản duy nhất để tránh tạo bản sao.
  • Thêm biểu tượng cảm xúc. 🐈

Bạn có thể cho tôi biết nếu sợi có độ phân giải phụ thuộc như npm v3 không ? Tôi hiểu rằng có một --flattùy chọn buộc một cấu trúc phẳng thực sự chỉ được phép cài đặt một phiên bản của mỗi phần phụ thuộc, nhưng hành vi mặc định về điều này là gì? Cảm ơn.
Dimitris Karagiannis

2
Thêm biểu tượng cảm xúc: cat:
Huei Tan,

7
Câu trả lời xuất sắc. Tôi tự hỏi liệu họ đã thử đóng góp vào npm trước khi fork và đổi tên và thay đổi cú pháp của install -g.
Gardner Bickford


2

npm :

  1. Trình quản lý gói cho JavaScript. npm là giao diện dòng lệnh cho hệ sinh thái npm. Nó đã được thử nghiệm trong trận chiến, linh hoạt một cách đáng ngạc nhiên và được hàng trăm nghìn nhà phát triển JavaScript sử dụng mỗi ngày.
  2. NPM tạo tệp khóa chính xác trong khi tệp khóa sợi có thể bị hỏng trong một số trường hợp và phải được sửa bằng dụng cụ sợi

Sợi :

  1. Trình quản lý gói mới cho JavaScript. Yarn lưu trữ mọi gói mà nó tải xuống để không bao giờ cần phải tải lại. Nó cũng song song hoạt động để tối đa hóa việc sử dụng tài nguyên để thời gian cài đặt nhanh hơn bao giờ hết.
  2. Yarn không hỗ trợ đăng nhập bằng mật khẩu (trong khi NPM thì có)

1
những loại đăng nhập?
Rich Stone

2

PNPM là gì?

pnpmsử dụng liên kết cứng và liên kết tượng trưng để lưu một phiên bản của mô-đun chỉ một lần trên đĩa. Ví dụ: khi sử dụng npm hoặc Yarn, nếu bạn có 100 dự án sử dụng cùng một phiên bản lodash, bạn sẽ có 100 bản sao lodash trên đĩa. Với pnpm, lodash sẽ được lưu ở một nơi duy nhất trên đĩa và một liên kết cứng sẽ đưa nó vào node_modules nơi nó sẽ được cài đặt.

Kết quả là bạn tiết kiệm được hàng gigabyte dung lượng trên ổ đĩa của mình và bạn có nhiều bản cài đặt nhanh hơn! Nếu bạn muốn biết thêm chi tiết về cấu trúc node_modules độc đáo mà pnpm tạo ra và tại sao nó hoạt động tốt với hệ sinh thái Node.js, hãy đọc bài viết nhỏ này: Tại sao chúng ta nên sử dụng pnpm?

Làm thế nào để cài đặt PNPM?

npm install -g pnpm

Làm thế nào để cài đặt gói npm bằng PNPM?

pnpm install -g typescript // or your desired package

Lợi ích của PNPMhơn YarnNPM

Đây là tiến bộ-thanh hiển thị thời gian lắp đặt được thực hiện bởi NPM, YARNPNPM(ngắn-bar là tốt hơn) nhập mô tả hình ảnh ở đây

Nhấp để Hoàn thành kiểm tra Điểm chuẩn

để biết thêm chi tiết, hãy truy cập https://www.npmjs.com/package/pnpm


1

Khi bạn cài đặt một gói bằng Yarn (sử dụng thêm tên gói), nó sẽ đặt gói đó vào đĩa của bạn . Trong lần cài đặt tiếp theo, gói này sẽ được sử dụng thay vì gửi một yêu cầu HTTP để lấy tarball từ sổ đăng ký.

Yarn đi kèm với một trình kiểm tra giấy phép tiện dụng , có thể trở nên thực sự mạnh mẽ trong trường hợp bạn phải kiểm tra giấy phép của tất cả các mô-đun mà bạn phụ thuộc vào.

Nếu bạn đang làm việc trên phần mềm độc quyền, việc bạn sử dụng phần mềm nào không thực sự quan trọng. Với npm, bạn có thể sử dụng npm-cowrap.js, trong khi bạn có thể sử dụng fiber.lock với Yarn.

Để biết thêm thông tin, vui lòng đọc blog sau

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


1

Cố gắng cung cấp một cái nhìn tổng quan hơn cho người mới bắt đầu.

npm từ trước đến nay (2010) là trình quản lý gói phổ biến nhất cho JavaScript. Nếu bạn muốn sử dụng nó để quản lý các phần phụ thuộc của dự án của mình, bạn có thể nhập lệnh sau:

npm init

Điều này sẽ tạo ra một package.jsontệp. Nó chứa tất cả các phụ thuộc của dự án.

Sau đó

npm install

sẽ tạo một thư mục node_modulesvà tải xuống các phụ thuộc (mà bạn đã thêm vào package.jsontệp) bên trong nó.

Nó cũng sẽ tạo một package-lock.jsontệp. Tệp này được sử dụng để mô tả cây phụ thuộc đã được tạo. Nó cho phép các nhà phát triển cài đặt các phụ thuộc giống nhau. Ví dụ: bạn có thể tưởng tượng một nhà phát triển nâng cấp phụ thuộc lên v2 và sau đó là v3 trong khi người khác trực tiếp nâng cấp lên v3.

npm cài đặt các phụ thuộc theo cách không xác định có nghĩa là hai nhà phát triển có thể có một node_modulesthư mục khác nhau dẫn đến các hành vi khác nhau . ** npm đã bị mang tiếng xấu chẳng hạn như vào tháng 2 năm 2018: một vấn đề đã được phát hiện trong phiên bản 5.7.0 trong đó việc chạy sudo npm trên hệ thống Linux sẽ thay đổi quyền sở hữu các tệp hệ thống, phá vỡ vĩnh viễn hệ điều hành.

Để giải quyết những vấn đề và những người khác, Facebook đã giới thiệu một người quản lý mới gói (2016): Sợi một nhanh hơn, an toàn hơn, và đáng tin cậy hơn Package Manager cho JavaScript.

Bạn có thể thêm Yarn vào một dự án bằng cách nhập:

yarn init

Điều này sẽ tạo ra một package.jsontệp. Sau đó, cài đặt các phụ thuộc với:

yarn install

Một thư mục node_modulessẽ được tạo. Yarn cũng sẽ tạo một tệp có tên yarn.lock. Tệp này phục vụ cùng mục đích với package-lock.jsonnhưng thay vào đó được xây dựng bằng cách sử dụng thuật toán xác định và đáng tin cậy, do đó dẫn đến các bản dựng nhất quán.

Nếu bạn đã bắt đầu một dự án với npm , bạn thực sự có thể chuyển sang Yarn một cách dễ dàng. sợi sẽ tiêu thụ như nhau package.json. Xem Di chuyển từ npm để biết thêm chi tiết.

Tuy nhiên, npm đã được cải thiện với mỗi bản phát hành mới và một số dự án vẫn sử dụng npm thay cho sợi .


1

Câu trả lời của @msanford bao gồm hầu hết mọi thứ, tuy nhiên, tôi thiếu phần bảo mật (Các lỗ hổng đã biết của OWASP).

Sợi

Bạn có thể kiểm tra chúng bằng cách sử dụng yarn audit, tuy nhiên, bạn không thể sửa chúng. Đây vẫn là một vấn đề mở trên GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ).

npm

Bạn có thể sử dụng npm audit fix, vì vậy một số trong số chúng bạn có thể tự sửa chữa.

Cả hai người, tức npm audit& yarn auditcó các công cụ tích hợp liên tục của mình. Đây lần lượt là https://github.com/IBM/audit-ci (đã sử dụng, hoạt động tốt!) Và https://yarnpkg.com/package/audit-ci (chưa sử dụng).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.