Yarn là gì: Tìm hiểu Yarn Package Manager trong JavaScript

Yarn là một trong những trình quản lý gói (package manager) phổ biến và mạnh mẽ nhất trong hệ sinh thái JavaScript hiện nay. Yarn ra đời nhằm cải thiện những hạn chế của npm như tốc độ cài đặt chậm, lỗi xung đột phiên bản hay thiếu tính ổn định. Với khả năng xử lý nhanh, ghi nhớ dependency hiệu quả, cùng hệ thống quản lý lockfile, Yarn giúp kiểm soát thư viện dễ dàng hơn. Cùng tìm hiểu chi tiết Yarn là gì qua bài viết sau.

Đọc bài viết sau để được giải đáp chi tiết hơn về:

  • Yarn là gì? Tại sao nên dùng package manager trong JS?
  • Yarn Modern (Yarn Berry) là gì? có tính năng và ưu điểm gì?
  • Cách cài đặt và kiểm tra các phiên bản của Yarn
  • So sánh Yarn và npm
  • Các lệnh cơ bản và nâng cao với Yarn
  • Một số thao tác cơ bản với Yarn.

Yarn Package Manager là gì?

Yarn là một trình quản lý gói (package manager) tương tự như npm. Yarn được khởi xướng bởi Facebook và hiện tại đã được mã nguồn mở. Lý do ra đời của Yarn là để cải thiện các vấn đề về hiệu năng và bảo mật mà npm thời điểm đó gặp phải.

Nếu bạn đã quen dùng npm trong các dự án, thì việc chuyển sang Yarn rất đơn giản. Các lệnh của Yarn gần giống với npm, nên việc làm quen không tốn nhiều thời gian. Cả hai đều sử dụng chung file package.json, vì vậy bạn có thể chuyển sang Yarn mà không cần thay đổi cấu trúc dự án hiện tại.

Tại sao cần sử dụng Package Manager trong JavaScript?

Giả sử không có trình quản lý gói (package manager), thì bạn sẽ phải tự làm thủ công tất cả những việc sau:

  • Tìm đúng các gói phù hợp cho dự án của mình.
  • Kiểm tra xem các gói đó có lỗ hổng bảo mật nào đã được biết chưa.
  • Tải các gói về máy.
  • Cài đặt vào đúng vị trí trong hệ thống.
  • Theo dõi các bản cập nhật mới của từng gói.
  • Nâng cấp từng gói mỗi khi có phiên bản mới.
  • Gỡ bỏ những gói không còn sử dụng nữa.

Việc tự quản lý hàng chục, thậm chí hàng trăm gói như vậy rất tốn thời gian và dễ gây mệt mỏi. Chính vì thế, các trình quản lý gói như NPM, pNPM, Bower và Yarn ra đời để tự động hóa và đơn giản hóa quá trình quản lý gói, giúp lập trình viên không phải làm mọi thứ bằng tay.

Yarn Modern là gì?

Yarn Modern (trước đây thường được gọi là Yarn Berry từ v2 đến v3), hay còn gọi là Yarn Berry, là phiên bản hiện đại của package manager Yarn (từ v2 trở đi). Phiên bản này thay đổi hoàn toàn cách quản lý dependencies bằng cách loại bỏ hoàn toàn thư mục node_modules.

Ra mắt năm 2020 như một bản viết lại hoàn chỉnh của Yarn Classic, Yarn Berry thay thế hàng nghìn tệp trong node_modules bằng file .pnp.cjs (có thể có một số file phụ trợ khác)một tệp duy nhất .pnp.cjs. Tệp này đóng vai trò ánh xạ vị trí lưu trữ các package. Cách tiếp cận này giúp giảm số lượng thao tác ghi/đọc ổ đĩa và hỗ trợ các tính năng mạnh mẽ như zero-installs (commit trực tiếp dependencies vào git).

Tính đến năm 2025, Yarn đã phát triển lên phiên bản 4+ (nay gọi là “Yarn Modern”) với tốc độ nhanh hơn, engine kiểm tra ràng buộc (constraints) viết bằng JavaScript, cùng khả năng tích hợp Node.js tốt hơn thông qua Corepack.

Một số điểm nổi bật của Yarn Modern có thể kể đến như:

  • Plug’n’Play (PnP): Điểm cải tiến lớn nhất là hệ thống Plug’n’Play (PnP), thay thế thư mục node_modules truyền thống bằng file .pnp.cjsmột tệp duy nhất .pnp.cjs. Tệp này hoạt động như một bảng tra cứu (lookup table), giúp quá trình resolve dependencies nhanh hơn và hỗ trợ các tính năng như zero-installs (commit dependencies trực tiếp vào version control).
  • Zero-installs: Cho phép commit toàn bộ dependencies vào version control (Git), giúp dự án có thể chạy ngay sau khi clone mà không cần chạy yarn install.
  • Hiệu năng cải thiện: Nhờ PnP và nhiều tối ưu khác, Yarn Berry nhanh và hiệu quả hơn đáng kể so với Yarn Classic.
  • Quản lý workspace: Cung cấp khả năng quản lý nhiều workspace trong cùng một dự án tốt hơn, đặc biệt hữu ích cho các ứng dụng lớn và phức tạp.
  • Tính năng mới: Bao gồm constraints engine (cho phép định nghĩa quy tắc cho dự án) và hệ thống plugin – các tính năng chỉ có trên Yarn Berry.
  • Tương thích linh hoạt: Dù PnP là điểm nổi bật, Yarn Berry vẫn hỗ trợ cài đặt kiểu node_modules truyền thống và cơ chế cache theo địa chỉ nội dung tương tự pnpm cho những ai cần.
  • Cấu hình hiện đại: Sử dụng định dạng tệp cấu hình mới .yarnrc.yml, khác với Yarn Classic.

Lợi ích nổi bật của Yarn trong quản lý gói là gì?

Một số công dụng nổi bật của Yarn trong quá trình quản lý gói (package management) như sau:

  • Cài đặt dự đoán được: Yarn khóa chính xác phiên bản và mã kiểm tra (checksum) của các gói, giúp tránh tình trạng dự án chạy tốt ở môi trường dev nhưng bị lỗi ở production do các thay đổi nhỏ trong phiên bản phụ thuộc.
  • Offline Mode: Yarn tự động lưu cache các gói đã tải về, cho phép bạn cài lại các phụ thuộc ngay cả khi không có internet. Điều này rất hữu ích khi làm việc ở nơi không có mạng (như trên máy bay), hoặc khi registry bị gián đoạn.
  • Cài đặt nhanh hơn: Khác với các trình quản lý cũ cài từng gói một, Yarn tải nhiều gói cùng lúc, giúp tăng tốc quá trình cài đặt, đặc biệt là với những dự án lớn.
  • Độ tin cậy cao hơn: Nếu việc tải một gói bị lỗi do mạng, Yarn sẽ tự động thử lại với các nguồn thay thế, thay vì dừng toàn bộ quá trình. Điều này rất quan trọng trong các hệ thống CI/CD và triển khai tự động.
  • Ổn định lâu dài: Một khi đã cài đặt thành công, Yarn đảm bảo dự án của bạn sẽ tiếp tục hoạt động ổn định trong tương lai, không lo bị thay đổi bất ngờ do dependency bị cập nhật.

Để minh họa khả năng hoạt động ngoại tuyến (offline) của Yarn, hãy thử xóa và cài lại các gói phụ thuộc mà không cần kết nối internet như sau:

rm -rf node_modules

yarn install --offline

Kết quả hiển thị:

yarn install v1.22.22

[1/4] 🔍 Resolving packages...

[2/4] 🚚 Fetching packages...

[3/4] 🔗 Linking dependencies...

[4/4] 🔨 Building fresh packages...

✨ Done in 0.26s.

Quá trình cài đặt diễn ra cực kỳ nhanh vì Yarn sử dụng các gói đã được lưu trong bộ nhớ đệm (cache), không cần tải lại từ internet. Tính năng này giúp tăng tốc đáng kể các quy trình CI/CD và triển khai tự động, nơi việc tiết kiệm thời gian và đảm bảo độ ổn định là rất quan trọng.

Làm thế nào để cài đặt Yarn? Cách kiểm tra phiên bản Yarn được cài đặt như thế nào?

Nếu trước đây bạn thường cài Yarn thông qua npm, thì từ Yarn 2 trở đi, cách này đã không còn được khuyến nghị nữa. Thay vào đó, Yarn hiện được quản lý thông qua Corepack – công cụ đi kèm Node.js giúp bạn cài đặt và sử dụng đúng phiên bản Yarn cho từng dự án.

Đầu tiên, bạn tiến hành cài đặt corepack (nếu chưa có) và bật tính năng này:

npm install corepack --global

corepack enable

Sau đó, dùng yarn set version stable để lựa chọn phiên bản Yarn phù hợp:

cd projects/my-project # chọn đường dẫn dự án

yarn set version stable

yarn install

Để tiến hành kiểm tra Yarn đã được cài đặt trên hệ thống, bạn tiến hành chạy lệnh: yarn -v

Lệnh cài đặt gói bằng Yarn, để cài đặt một gói bất kỳ, bạn sử dụng cú pháp:

yarn add package-name

Giả sử bạn muốn cài đặt một phiên bản cụ thể của gói, hãy thêm @[số-phiên-bản] vào sau tên gói, ví dụ:

yarn add package-name@4.14.1

Ngoài ra, nếu bạn chỉ dùng gói đó cho mục đích phát triển hoặc kiểm thử (development và testing), hãy dùng tùy chọn –dev như sau:

yarn add package-name --dev

Sau khi chạy các lệnh trên, Yarn sẽ tự động tạo 3 thành phần trong thư mục gốc của dự án:

  • Thư mục node_modules chứa toàn bộ mã nguồn của các gói đã cài.
  • Tập tin package.json để quản lý danh sách các gói và cấu hình dự án.
  • Tập tin yarn.lock giúp đảm bảo các gói được cài đúng phiên bản trên mọi môi trường.

Một số lệnh cơ bản khi sử dụng Yarn

Dưới đây là danh sách các câu lệnh thường được sử dụng phổ biến trong Yarn:

Lệnh YarnChức năng
Yarn addThêm các gói phụ thuộc vào dự án
Yarn binLấy đường dẫn đến file script dạng nhị phân
Yarn cache cleanXóa các tệp cache được chia sẻ
Yarn configHiển thị cấu hình hiện tại
Yarn config getĐọc một giá trị cấu hình
Yarn config setThay đổi một giá trị cấu hình
Yarn config unsetXóa một thiết lập cấu hình
Yarn dedupeGộp các gói phụ thuộc trùng nhau trong phạm vi phiên bản chồng lặp
Yarn dlxChạy một gói trong môi trường tạm thời
Yarn execThực thi một lệnh shell
Yarn explainGiải thích mã lỗi
Yarn explain peer-requirementsGiải thích các yêu cầu phụ thuộc ngang hàng
Yarn infoXem thông tin liên quan đến gói
Yarn initTạo một package mới
Yarn installCài đặt các gói phụ thuộc cho dự án
Yarn linkKết nối một dự án local với dự án khác
Yarn nodeChạy Nodejs với các hook đã được thiết lập
Yarn npm auditKiểm tra lỗ hỏng bảo mật trong các gói đã cài
Yarn packTạo file .tgz từ workspace hiện tại
Yarn patchChuẩn bị một gói để sửa đổi (patch)
Yarn patch-commitTạo bản vá từ một thư mục
Yarn rebuildBiên dịch lại các gói native của dự án
Yarn removeGỡ bỏ các gói phụ thuộc khỏi dự án
Yarn runChạy một script được định nghĩa trong package.json
Yarn set resolutionÁp dụng một phiên bản cụ thể cho gói phụ thuộc
Yarn set versionKhóa phiên bản Yarn được sử dụng trong dự án
Yarn set version from sourcesBiên dịch Yarn từ mã nguồn (nhánh master)
Yarn stageThêm tất cả file liên quan đến Yarn vào hệ thống quản lý version (VCS)
Yarn unlinkNgắt kết nối dự án local khỏi một dự án khác
Yarn unplugÉp giải nén một danh sách gói cụ thể
Yarn upNâng cấp các gói phụ thuộc trong toàn bộ dự án
Yarn whyHiển thị lý do tại sao một gói lại được cài đặt
Yarn constraintsKiểm tra xem dự án có tuân thủ các ràng buộc (constraints) hay không
Yarn constraints queryTruy vấn cơ sở dữ liệu ràng buộc
Yarn constraints sourceIn ra mã nguồn của các ràng buộc hiện tại

Một số câu lệnh liên quan về npm

Yarn npm infoHiển thị thông tin về một gói
Yarn npm loginLưu thông tin đăng nhập mới để truy cập vào registry của npm
Yarn npm logoutĐăng xuất khỏi registry của npm
Yarn npm publishĐăng tải workspace hiện tại lên registry của npm
Yarn npm tag addThêm một thẻ (tag) cho một phiên bản cụ thể của gói
Yarn npm tag listLiệt kê tất cả các thẻ (dist-tags) của một gói
Yarn npm tag removeXóa một thẻ khỏi gói
Yarn npm whoamiHiển thị tên người dùng hiện tại đã đăng nhập

Phân biệt: Yarn và npm trong JavaScript khác nhau như thế nào?

Trong JavaScript, npm (Node Package Manager) và Yarn là hai công cụ được sử dụng rộng rãi để quản lý các dự án JavaScript. Đây là những công cụ không thể thiếu để quản lý thư viện phụ thuộc một cách hiệu quả và đảm bảo khả năng mở rộng của dự án.

npm sẽ tải các thư viện phụ thuộc từ npm registry mỗi lần bạn chạy lệnh npm install, trong khi yarn sẽ lưu các thư viện này vào bộ nhớ đệm (cache) và lấy từ ổ đĩa khi bạn dùng lệnh yarn add.

Cả npm và yarn đều là trình quản lý gói cho JavaScript, nhưng chúng có một vài điểm khác biệt như được liệt kê trong bảng dưới đây:

Yếu tốnpmyarn
Tốc độ cài đặtCài đặt song song, nhưng chủ yếu vẫn dùng node_modules và cache ở mức cơ bảnNhanh hơn nhờ cài đặt song song
Phụ thuộcKém ổn địnhỔn định hơn
OfflineHỗ trợ hạn chếHỗ trợ đầy đủ
Bảo mậtnpm audit có sẵn; từ npm 7 kiểm tra SHA-512 và có biện pháp bảo mật tương đương YarnKiểm tra nâng cao
Tệp lock mặc địnhpackage-lock.jsonyarn.lock
Cài đặt phụ thuộcnpm installnpm install
Cài đặt góinpm install package_name@version_numberyarn add package_name@version_number
Thông tin packagenpm view package_nameyarn info package_name

Ví dụ: Cài đặt gói axios bằng npm và sau đó bằng yarn. Thư viện axios là một thư viện JavaScript được dùng để thực hiện các yêu cầu HTTP từ trình duyệt hoặc từ Node.js.

  • Để cài đặt thư viện axios bằng npm, bạn cần chạy lệnh sau: npm install axios
  • Tương tự, để cài đặt axios bằng yarn, bạn chạy: yarn add axios

Kết quả hiển thị khi chạy đoạn mã bằng npm

Kết quả hiển thị khi chạy đoạn mã bằng yarn

Các câu hỏi thường gặp về Yarn

Tại sao nên nâng cấp lên Yarn Modern?

Mặc dù Yarn Classic (phiên bản 1.x) vẫn là một phần quan trọng trong hệ sinh thái JavaScript, nhưng nếu có thể, bạn nên nâng cấp lên Yarn Modern.

  • Yarn Modern còn bổ sung nhiều công cụ mạnh mẽ như yarn dlx, patch: protocol tích hợp sẵn, cùng với hệ thống plugin mở rộng hỗ trợ quản lý thay đổi (changesets), ràng buộc (constraints), workspaces nâng cao.
  • Yarn Modern áp dụng chiến lược cài đặt mới giúp dự án “nhẹ” hơn đáng kể. Ví dụ, với cấu hình mặc định, dự án CRA (Create React App) chỉ chiếm 45MB thay vì 237MB như trước.
  • Kiến trúc mới cho phép bạn tự xây dựng và bổ sung tính năng riêng theo nhu cầu, không cần phải chờ nhóm phát triển chính thức cập nhật.
  • Yarn Modern được xây dựng dựa trên kinh nghiệm nhiều năm duy trì Yarn Classic. Nhờ đó, những bất cập cũ đã được khắc phục, quy trình xử lý dependency được tinh gọn và xử lý dữ liệu hiệu quả hơn.
  • Yarn Modern được thiết kế để linh hoạt hơn, dễ cập nhật hơn và có thể phát triển tính năng mới nhanh hơn bao giờ hết.

Yarn có phải do Facebook phát triển không?

Câu trả lời là Không. Mặc dù phiên bản đầu tiên của Yarn được phát triển bởi Sebastian McKenzie khi anh đang làm việc tại Facebook, thiết kế ban đầu của dự án đã nhận được phản hồi từ nhiều công ty khác (chẳng hạn như Tilde thông qua Yehuda Katz), và dự án sau đó được chuyển sang một tổ chức riêng trên GitHub. 

Facebook vẫn tiếp tục đầu tư vào Yarn trong những năm tiếp theo (chủ yếu vì nó trở thành một phần quan trọng trong hệ sinh thái React Native), nhưng các đóng góp chính lại đến từ cộng đồng mã nguồn mở. Ngày nay, nhóm phát triển Yarn hoạt động tích cực đều là những người làm việc tại các công ty không phải là nhà sáng lập. Nhân viên của Facebook vẫn luôn được chào đón nếu muốn đóng góp cho dự án, nhưng các đóng góp đó sẽ phải trải qua quy trình đánh giá như bất kỳ ai khác.

Chuyển đổi từ Yarn Classic sang Yarn Modern cần lưu ý điều gì?

Thông thường, bạn sẽ cần xử lý một vài điểm chính sau:

  • Định dạng thiết lập đã thay đổi. Yarn không còn đọc các tệp .npmrc hoặc .yarnrc nữa, mà sẽ sử dụng thiết lập từ tệp .yarnrc.yml.
  • Một số gói bên thứ ba không liệt kê đầy đủ các phụ thuộc của chúng và sẽ cần được “hỗ trợ” thông qua phần thiết lập packageExtensions.
  • Hỗ trợ cho các trình soạn thảo văn bản hiện khá tốt, nhưng bạn cần chạy phần thiết lập một lần duy nhất được liệt kê trong tài liệu SDK.
  • Một số công cụ (chủ yếu là React Native và Flow) sẽ yêu cầu bạn chuyển về chiến lược cài đặt node_modules bằng cách thiết lập nodeLinker thành node-modules. TypeScript thì không gặp vấn đề này.

Làm sao để chia sẻ script giữa các workspace trong Yarn?

Bất kỳ script nào có dấu hai chấm (:) trong tên (ví dụ: build:foo) đều có thể được gọi từ bất kỳ workspace nào. Một tính năng ít người biết khác của Yarn là biến môi trường $INIT_CWD luôn trỏ tới thư mục ban đầu nơi script được chạy.

Kết hợp 2 tính năng này, bạn có thể viết các script dùng chung như sau:

{
  "dependencies": {
    "typescript": "^3.8.0"
  },
  "scripts": {
    "g:tsc": "cd $INIT_CWD && tsc"
  }
}

Sau đó, từ bất kỳ workspace nào có tsconfig.json riêng, bạn đều có thể gọi TypeScript bằng lệnh:

{
  "scripts": {
    "build": "yarn g:tsc"
  }
}

Hoặc nếu bạn chỉ muốn chạy tsc từ workspace gốc:

{
  "scripts": {
    "build": "run -T tsc"
  }
}

Hoặc nếu bạn muốn chạy một script nằm trong thư mục gốc của dự án:

{
  "scripts": {
    "build": "node ${PROJECT_CWD}/scripts/update-contributors.js"
  }
}

Tổng kết về Yarn

Yarn là công cụ không thể thiếu nếu bạn muốn xây dựng các dự án JavaScript một cách hiện đại, nhanh chóng và ổn định hơn. Từ những bước cài đặt đầu tiên cho đến việc sử dụng các lệnh cơ bản, Yarn mang đến trải nghiệm mượt mà và đáng tin cậy hơn hẳn so với nhiều công cụ khác.

Hy vọng với hướng dẫn chi tiết trong bài viết này, bạn đã sẵn sàng chuyển sang Yarn hoặc khai thác tối đa tiềm năng của nó trong công việc lập trình hàng ngày.

Xem thêm: JavaScript là gì? Học JavaScript cơ bản với lộ trình dễ hiểu nhất

TÁC GIẢ
Uyen Ngo
Uyen Ngo

Content Writer

Hơn 1 năm kinh nghiệm viết lách trong lĩnh vực lập trình, thiết kế Game, AI cùng sự nghiên cứu chuyên sâu về các chủ đề IT, Uyên đem đến các bài viết chất lượng và hữu ích về khía cạnh Front-End, Unity, Unreal Engine, Trí tuệ nhân tạo,… Cùng với đó là các bài hướng dẫn lập trình từ cơ bản đến nâng cao (HTML, JavaScript, CSS, Website Development,...). Uyên luôn ưu tiên mang đến thông tin được cập nhật liên tục và phù hợp với xu hướng công nghệ hiện nay.