Yarn có gì mới so với npm

Trong Javascript, các lập trình viên có thể chia sẻ với nhau các đoạn code để tránh việc viết đi viết lại các component cơ bản, các thư viện hay cả một framework. Mỗi một đoạn mã (code) có thể bị phụ thuộc vào các đoạn mã khác, các sự phụ thuộc đó cần được quản lí bởi công cụ quản lí các gói thư viện (package mangager). Một trong những công cụ quản lí các gói thư viện JavaScript phổ biến nhất hiện nay là npm.

Mặc dù npm rất phổ biến được đa số các lập trình viên sử dụng. Tuy nhiên đối với một dự án lớn khi mà lượng mã chương trình và số lượng lập trình viên tham gia quá lớn, npm gặp phải một số vấn đề với tính nhất quán (consistency), tính bảo mật và hiện năng. Để giải quyết được những vấn đề trên một sản phẩm mới được ra đời được gọi là Yarn - nó nhanh, đảm bảo và tin cậy có khả năng thay thế npm.

Yarn ra đời

Chức năng chính của bất kì các gói quản lí thư viện nào là cài đặt các gói này từ các kho cung cấp chung (global registry) đến các môi trường các máy của lập trình viên. mỗi một gói có hoặc không có các gói mà nó phụ thuộc. Bình thường một dự án có thể có từ 10, đến hàng trăm hay đến hàng nghìn các gói thư viện bao gồm cả các gói phần mềm mà nó phụ thuộc.

Yarn là một sản phẩm mã nguồn mở, được sự hợp tác của Exponent, Google và Tilde. Với Yarn, các lập trình viên vẫn truy cập vào kho cung cấp các gói phần mềm do npm lưu trữ, tuy nhiên chúng ta có thể cài đặt các gói phần mềm này nhanh hơn và đảm bảo tính thống nhất các lập trình viên tham gia cài đúng phiên bản của các gói phần mềm được định nghĩa.

Yarn được đưa ra để thay thế cho npm hoặc các công cụ quản lí các gói thư viện khác cũng tương tác với kho cung cấp các gói phần mềm do npm cung cấp. Nó có đầy đủ những tính năng của npm trong khi đó lại nhanh hơn, bảo mật hơn và đáng tin cậy. Vì vậy bạn hoàn toàn có thể yên tâm khi dùng Yarn thay thế cho npm, bower ...

Quản lí chính xác phiên bản cài đặt ( yarn.lock)

package.json là file mà cả npm và Yarn đều dùng để kiểm tra các gói thư viện phụ thuộc của dự án, phiên bản của chúng cũng không phải luôn luôn cố định. Trong file package.json cho phép bạn định nghĩa một khoảng các phiên bản cho các gói phần mềm phụ thuộc. Cách này cho phép bạn có thể chọn một phiên bản cố định hoặc một phiên bản thỏa mãn điều kiện nào đó ví dụ > 2.0.0 cho phép npm có thể cài đặt phiên bản mới nhất đã sửa hầu hết các lỗi.

Ý tưởng chung là theo semantic versioning, các gói dùng cho việc phát hành sản phẩm (realease) không được có bất kì thay đổi về phiên bản phần mềm gây nguy hiểm. Tuy nhiên điều đó không phải lúc nào cũng đúng khi sử dụng npm. Với npm các lập trình viên có thể cài đặt các gói phần mềm với phiên bản khác nhau với cùng nội dung file package.json.

Để tránh việc các phiên bản của gói thư viện không giống nhau, Yarn dùng file yarn.lock để quản lí chính xác phiên bản được cài đặt vào dự án đảm bảo tất cả các lập trình viên tất cả các máy đều được cài đặt chính xác phiên bản này.

Để làm việc tương tự với npm, bạn chạy lệnh npm shrinkwrap sẽ tự động sinh ra một file lock npm-shrinkwrap.json dùng để lưu lại chính xác phiên bản cài đặt của các gói phần mềm. Bởi vì file npm-shrinkwrap.json không được tạo mặc định và chỉ cập nhật khi nó đã tồn tại.

Yarn cài đặt các gói thư viện

Ở trong hệ thống của Node, các gói thư viện mà dự án bạn cần (dependences) được cài đặt ở trong thư mục node_modules. Quá trình cài đặt các gói phần mềm của Yarn được chia thành 3 bước

  1. Kiểm tra: Yarn bắt đầu kiểm tra các gói thư viện phụ thuộc bằng cách gửi các yêu cầu (requests) đến kho lưu trữ (registry) để tìm kiếm các gói phụ thuộc.

  2. Tải về: Tiếp theo đó, Yarn xem trong thư mục cache chung xem gói thư viện này đã được tải về trước đó chưa. Nếu chưa từng được tải về trước đó, Yarn sẽ tải về và lưu trữ tại thư mục cache dùng để lưu trữ chung. Điều đó có nghĩa là bạn chỉ cần tải về duy nhất 1 lần.

  3. Tạo liên kết: Cuối cùng, Yarn sẽ sao chép tất cả các file cần thiết từ thư mục cache chung tới thư mục node_modules trong dự án của bạn.

Bởi việc chia các bước một cách rõ ràng như trên. Yarn có thể thực hiện song song các tiến trình cài đặt các gói thư viện khác nhau, điều này làm cho việc cài đặt các gói phần mềm trở lên nhanh hơn.

Để kiểm chứng hiệu quả của việc cài đặt các gói phần mềm song song của yarn và với npm là cài đặt tuần tự (sau khi đã xóa hết cache) chúng ta có kết quả sau

Với gói express (cài đặt tổng là 42 gói bao gồm cả gói phụ thuộc)

  • npm: 9 seconds
  • Yarn: 1.37 seconds

Kết quả khá kinh ngạc tốc độ nhanh hơn rất nhiều đến hơn 6 lần

Tiếp đến ta thử với gói gulp (với tổng cộng 195 gói)

  • npm: 11 seconds
  • Yarn: 7.81 seconds

Kết quả Yarn vẫn có hiệu năng tốt hơn hẳn.

Kết luận

Với nhiều cải tiến đáng kể của mình so với npm yarn rất đáng để thử và trải nghiệm với dự án của bạn. Bạn có thể tham khảo thêm các lệnh khi chuyển từ sử dụng npm sang yarn ở đây migrating from npm

Tham khảo

  1. Yarn: A new package manager for JavaScript
  2. Yarn and npm
  3. Migrating from npm
  4. Install Yarn

All Rights Reserved