NPM vs. Yarn

NPM vs. Yarn

Yarn vs npm: Everything You Need to Know

Reference:

1. Yarn vs npm: Everything You Need to Know: English (sitepoint.com) and Vietnamese (techmaster.vn)

Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các thư viện với các đoạn code đã thực hiện sẵn một chức năng nào đó. Nó giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các thư viện lập trình hay thậm chí cả các framework.

Một dự án thường cần rất nhiều packages để sử dụng cho nhiều mục đích khác nhau trong dự án và việc quản lý các phần mềm này là rất cần thiết do các packages được cài đặt có thể thay đổi hoặc bạn cần cập nhật một phiên bản phù hợp hơn trong quá trình phát triển dự án. Công việc này nếu không có các công cụ quản lý gói phần mềm (package manager) thì rất đáng sợ do bạn thường xuyên phải vào nơi cung cấp các gói phần mềm kiểm tra xem có phiên bản mới không, tải về và cập nhật chúng vào dự án. Do đó mà các công cụ như yarn, npm ra đời. Cả hai trình quản lý gói đều lưu trữ các tệp phụ thuộc (dependency files) vào thư mục node_modules. Tuy nhiên, trong Yarn 2, theo mặc định, thư mục sẽ không còn được hỗ trợ nữa.

npm

npm (Node Package Manager), được phát hành lần đầu vào năm 2010, là một trình quản lý gói cực kỳ phổ biến trong giới phát triển JavaScript. Đây là gói mặc định được cài đặt tự động bất cứ khi nào bạn cài đặt Node.js (Install Node.js) trên hệ thống của mình.

Yarn

Yarn là một công cụ quản lý package JavaScript, được xây dựng bởi Facebook, Google, Exponent và Tilde. Yarn được tạo ra để giải quyết các vấn đề mà các công ty này gặp phải khi sử dụng npm (Node Package Manager - 1 công cụ quản lý gói phần mềm mặc định cho Node.js):
    - Việc cài đặt các package không đủ nhanh và nhất quán.
    - Các lo ngại về bảo mật, như việc npm cho phép các package chạy code trong quá trình cài đặt.

Install Yarn on Linux:

    1. Via npm: npm install yarn
    2. Via apt-getsudo apt-get update && sudo apt-get install yarn

Yarn vs npm: Sự khác biệt về chức năng

yarn.lock file

package.json là file mà cả npm và Yarn sử dụng để theo dõi và quản lý các dependencies của dự án, version của các dependency không phải lúc nào cũng là một số chính xác. Thay vào đó, bạn có thể định nghĩa một khoảng các version. Với cách này, bạn có thể chỉ định một phiên bản chính và phụ cho một package, nhưng vẫn cho phép npm cài đặt bản vá mới nhất có thể fix một vài bug.

Trong điều kiện lý tưởng như semantic versioning, bản vá lỗi sẽ không bao gồm bất kỳ thay đổi nào. Nhưng điều này không phải lúc nào cũng đúng. Cùng một file package.json nhưng trên hai máy khác nhau, có thể cài đặt các phiên bản khác nhau của cùng một package, điều này có thể dẫn tới các bug.

Để tránh tình trạng trên, một phiên bản chính xác được thiết lập trong lock file. Bất cứ khi nào một module được cài đặt, Yarn sẽ tạo (hoặc cập nhật) một yarn.lock file. Cách này đảm bảo các máy khác nhau cài đặt chính xác một package, trong khi vẫn có một khoảng các phiên bản đã được cho phép được định nghĩa trong package.json.

Trong npm, lệnh npm shrinkwrap sẽ tạo ra một lock file, và npm install sẽ đọc file này trước khi đọc package.json, tương tự cách Yarn đọc yarn.lock trước tiên. Điểm khác biệt quan trọng ở đây là Yarn luôn luôn tạo và cập nhật yarn.lock, trong khi npm không tạo lock file bởi mặc định và chỉ cập nhật npm-shrinkwrap.json khi nó tồn tại.

To make sure your app works consistently, you should always save the yarn.lock file in your code repository.

Cài đặt song song

Bất cứ khi nào npm hoặc Yarn cài đặt một package, nó thực hiện một chuỗi các task. Trong npm, các task được thực thi trên mỗi package và tuần tự, có nghĩa là nó sẽ chờ một package được cài đặt hoàn tất rồi mới chuyển tới cái tiếp theo. Yarn thực hiện các task song song, điều này tăng hiệu suất.

No cache Cached Reinstall
npm 6.13.4 67 seconds 61 seconds 28 seconds
Yarn 1.21.1 57 seconds 29 seconds 1.2 seconds

npm liệt kê tất cả các packages và các dependencies đã cài đặt khi chạy npm install [package_name]. Yarn là một trường hợp khác, nó không liệt kê tất cả. Khi thông tin có thể thu được thông qua các lệnh khác, nó sẽ liệt kê ít thông tin hơn với các emojis phù hợp (trừ khi bạn đang sử dụng Windows).

CLI Command (Yarn and npm)

Commands common:

Command npm Yarn
Initializing a project npm init yarn init
Installing dependencies npm install yarn install
Running tests for the current package npm test yarn test
Confirming if any package is outdated npm outdated yarn outdated
Publishing a package to npm npm publish npm publish
Running a script npm run yarn run
Manipulating the local package cache npm cache clean yarn cache clean
Logging in and out npm login (and log out) yarn login (and log out)

Commands different:

Command npm Yarn
Installing packages npm install [package_name] yarn add [package_name]
Uninstalling packages npm uninstall [package_name] yarn remove [package_name]
Updating npm update yarn upgrade
Updating packages npm update [package_name] npm upgrade [package_name]
Installing package globally npm install --global [package_name] yarn global add [package_name]
Uninstalling package globally npm uninstall --global [package_name] yarn global remove [package_name]
Interactively updating dependencies npm run upgrade-interactive yarn upgrade-interactive

Đăng nhận xét

Mới hơn Cũ hơn