Update Yarn: Chi tiết cách cập nhật phiên bản nhanh chóng và an toàn

Update yarn là bước quan trọng giúp nhà phát triển luôn đồng bộ với các bản vá, tính năng mới và cải tiến từ Yarn. Việc cập nhật Yarn đúng cách giúp đảm bảo tính ổn định, cải thiện hiệu suất cũng như bảo mật cho dự án.

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

  • Đôi nét về Yarn Classic, Yarn Berry cũng như tại sao cần cập nhật Yarn.
  • Chi tiết cách cập nhật Yarn trong toàn cục hoặc trong một dự án cụ thể.
  • Một số lỗi thường gặp khi cập nhật Yarn.
  • Hướng dẫn cách update phiên bản Yarn 4.
  • Một số câu hỏi thường gặp về cách update Yarn. 

Yarn 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. 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.

Yarn Modern (trước đây thường được gọi là Yarn Berry từ v2 đến v3), 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).

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.

Xem chi tiết: Yarn là gì: Tìm hiểu Yarn Package Manager trong JavaScript

Tại sao cần update lên Yarn Modern?

  • Tính năng mới: Bên cạnh những tính năng quen thuộc, Yarn Modern còn mang đến nhiều tính năng mới như yarn dlx, giao thức tích hợp patch:. Cùng với hệ thống plugin mở rộng khả năng của Yarn với changesets, constraints, workspaces,…
  • Hiệu suất: Yarn Modern áp dụng chiến lược cài đặt mới giúp dự án gọn nhẹ hơn rất nhiều. Ví dụ, với cấu hình mặc định, các artifacts của CRA (Create React App) chỉ còn 45MB thay vì 237MB. Hiệu năng cũng được cải thiện rõ rệt. Trong một số trường hợp cache đã đầy đủ và không có thay đổi dependencies, Yarn PnP có thể thực hiện yarn install tức thì (0 giây).
  • Khả năng mở rộng: Kiến trúc của Yarn Modern cho phép bạn tự xây dựng các tính năng theo nhu cầu. Thay vì phải chờ đội ngũ phát triển chính thức hỗ trợ, giờ đây bạn hoàn toàn có thể tự bổ sung chức năng theo yêu cầu riêng như focused workspaces, custom installs, project validation,…
  • Độ ổn định: Yarn Modern được phát triển dựa trên nhiều năm kinh nghiệm duy trì Yarn Classic. Nhờ đó, những vấn đề thiết kế tồn đọng đã được khắc phục triệt để. Các workspaces giờ đây là thành phần cốt lõi, pipeline giải quyết dependencies được tinh gọn, cấu trúc dữ liệu tối ưu hơn,… 
Tiêu chíYarn ClassicYarn BerryYarn 4 (Modern)
Thời gian phát hành201620202024 – 2025
Cách cài đặtnpm install -g yarnQua Corepack hoặc yarn set version berryQua Corepack hoặc yarn set version berry
Yêu cầu Nodejs tối thiểuNode 10+ (tương thích rộng)Node 12+ (khuyên dùng bản mới)Node 20 trở lên
Quản lý dependenciesDùng node_modules, dễ trùng lặp, nặngPlug’n’Play (PnP), không dùng node_modules, nhanh, nhẹ, kiểm tra nghiêm ngặtTiếp tục PnP, thêm plugin, constraints, ổn định hơn
Global packagesCài global dễ dàng, quen thuộcKhông khuyến khích global, quản lý theo projectTương tự Yarn 2, dùng Corepack, quản lý theo project
File config.yarnrc, .npmrc.yarnrc.yml.yarnrc.yml, hỗ trợ plugin, constraints nâng cao
HoistingTự động hoisting qua node_modulesLoại bỏ hoisting truyền thống, dependencies rõ ràngCơ chế quản lý workspace và dependencies linh hoạt, rõ ràng hơn

Xem chi tiết: Install Yarn: Hướng dẫn cài đặt Yarn chi tiết cho mọi hệ điều hành

Cách cập nhật Yarn trong toàn cục và trong một dự án cụ thể? Nâng cấp từ Yarn 1 lên Yarn 2

Cập nhật Yarn toàn bộ

Để cập nhật Yarn lên các phiên bản hiện đại (v2 trở lên), bạn có thể sử dụng Corepack, công cụ quản lý package manager tích hợp sẵn trong Node.js hiện đại. Điều này giúp đảm bảo dự án của bạn luôn dùng đúng phiên bản Yarn mà không cần cài đặt toàn cục.

Bên cạnh đó, bạn nên lưu ý về phiên bản Nodejs khi cập nhật yarn, cụ thể như sau

  • Yarn Modern (từ phiên bản v2 trở lên) sẽ yêu cầu Node.js ≥ 16.10.
  • Yarn 4 khuyến nghị Node.js ≥ 18.
  • Nếu môi trường của bạn đang chạy Node.js thấp hơn các mức trên, cần nâng cấp Node.js trước khi tiến hành cập nhật Yarn để tránh lỗi không tương thích.

Đầu tiên, bạn kích hoạt corepack bằng câu lệnh corepack enable. Sau đó, chạy lệnh như bên dưới để cài đặt phiên bản bạn muốn:

yarn set version stable

Cập nhật Yarn trong một dự án cụ thể

Yarn policies được tạo ra để nâng cấp Yarn lên một phiên bản cụ thể trong một dự án.

yarn set version <tên version>

Khi chạy lệnh này, phiên bản Yarn được chỉ định sẽ tự động được tải xuống từ kho lưu trữ chính thức trên GitHub, và số phiên bản trong tệp cấu hình của dự án sẽ được cập nhật.

Miễn là thay đổi này đã được thêm và merge vào dự án, các thành viên khác cùng làm việc trên repository sẽ có thể sử dụng chung một phiên bản Yarn nhất quán.

Cách migrate từ Yarn 1 sang Yarn 2

Sẽ có những thay đổi lớn và khác biệt không thể tránh khỏi giữa Yarn 1 (Classic) và Yarn 2. Chẳng hạn:

  • yarn upgrade đã được đổi thành yarn up
  • yarn install --production nay là yarn workspaces focus --all --production, và yêu cầu cài đặt thêm một plugin riêng.

Do đó, để migrate từ Yarn 1 sang Yarn 2, bạn có thể thực hiện nhanh theo quy trình như sau:

  • Cài đặt Yarn toàn cục với phiên bản Yarn 1 mới nhất.
  • Di chuyển vào thư mục dự án bằng terminal.
  • Trong thư mục dự án, đặt phiên bản Yarn thành V2 với lệnh: yarn set version berry.
  • Sau đó, chạy lệnh yarn install là hoàn thành.

Một số những thay đổi khi update Yarn

Cập nhật cấu hình sang thiết lập mới

Yarn Modern sử dụng kiểu file cấu hình khác so với Yarn Classic. Với lockfile thì hầu như không ảnh hưởng (vì Yarn sẽ tự động chuyển đổi), nhưng có thể gây ra vấn đề nếu bạn vẫn dựa vào .npmrc hoặc .yarnrc.

  • Yarn Modern giờ đây chỉ sử dụng .yarnrc.yml.
  • Tất cả các file cấu hình khác (bao gồm cả .npmrc) đều bị bỏ qua.
  • Định dạng file cấu hình chuyển sang YAML thay vì JSON.
  • Hầu hết các key cấu hình cũng đã được đổi tên để đồng bộ và rõ ràng hơn.

Một số thay đổi quan trọng:

  • Custom registries giờ được cấu hình qua npmRegistryServer.
  • Registry authentication tokens giờ cấu hình qua npmAuthToken.

Rõ ràng về script pre và post

Yarn Modern thay đổi cách xử lý lifecycle scripts để mục đích rõ ràng hơn và loại bỏ các hành vi gây nhầm lẫn. Điểm khác biệt là các custom pre và post script không còn được hỗ trợ. Do đó, bạn cần viết lại như sau:

Trước đây:

{
  "scripts": {
    "prestart": "do-something",
    "start": "http-server"
  }
}

Bây giờ:

{
  "scripts": {
    "prestart": "do-something",
    "start": "yarn prestart && http-server"
  }
}

Bạn nên lưu ý rằng điều này chỉ áp dụng với user scripts (như start và các script tùy chỉnh). Các script gốc của Yarn như preinstall, install, postinstall vẫn dùng bình thường. 

Sử dụng yarn dlx thay cho yarn global

Yarn tập trung vào quản lý dự án, và việc quản lý các gói cài đặt toàn hệ thống được xem là ngoài phạm vi hỗ trợ. Vì lý do đó, lệnh yarn global đã bị loại bỏ. Thay vào đó, bạn cần dùng lệnh yarn dlx để chạy các script tạm thời, dùng một lần.

Ví dụ, bạn khởi chạy create-react-app để khởi tạo một project React mới. 

yarn dlx create-react-app my-app

Sau đó, chạy eslint để kiểm tra mã nguồn một lần mà không cài vĩnh viễn và cài đặt một dự án Nextjs phù hợp.

yarn dlx eslint

Không sử dụng bundleDependencies

Trường bundleDependencies (hoặc bundledDependencies) là một tính năng cũ, cho phép định nghĩa một tập hợp package sẽ được lưu nguyên vẹn trong package archive (bao gồm cả node_modules). Tuy nhiên, tính năng này có nhiều vấn đề:

  • Phụ thuộc vào node_modules, trong khi Plug’n’Play không có thư mục này.
  • Ép cách hoisting (nâng dependency lên) ngay trong package, gây xung đột với cơ chế hoisting từ các package khác.

Bạn có thể sử dụng các cách thay thế:

  • Nếu bạn cần patch một package, hãy fork nó hoặc tham chiếu qua giao thức file (vẫn hoạt động bình thường kể cả cho transitive dependencies). Ngoài ra có thể dùng giao thức portal: hoặc patch:, nhưng lưu ý chúng chỉ hoạt động cho Yarn.
  • Nếu bạn cần phát hành một package cho khách hàng ở dạng standalone (không phụ thuộc gì khác), hãy tự bundle nó bằng công cụ như Esbuild, Webpack, Rollup hoặc tương tự.

Thay nohoist bằng nmHoistingLimits

Thiết lập nohoist trong Yarn Classic được tạo ra để hỗ trợ React Native khi dùng workspaces. Tuy nhiên, cách nó hoạt động (dựa trên glob patterns) gây ra nhiều lỗi và nhầm lẫn, bởi không ai chắc chắn pattern nào cần được cấu hình. Trong Yarn Modern, tính năng này đã được đơn giản hóa và chỉ hỗ trợ 3 pattern xác định sẵn.

Nếu trước đây bạn dùng nohoist, hãy xóa nó khỏi cấu hình trong manifest và thay bằng việc thiết lập nmHoistingLimits trong file .yarnrc.yml:

nmHoistingLimits: workspaces

Lỗi thường gặp khi update Yarn

Khi nâng cấp Yarn, bạn vẫn có thể gặp một số vấn đề. Dưới đây là một số cách bạn có thể thử để khắc phục:

  • Chạy lại lệnh yarn install để cài đặt lại toàn bộ dependencies của dự án; bước này có thể giúp giải quyết các vấn đề về tương thích.
  • Kiểm tra lại file yarn.lock để chắc chắn rằng nội dung trong đó đúng như bạn mong đợi.
  • Tham khảo release notes (ghi chú phát hành) của Yarn và phiên bản mới để nắm được các thay đổi lớn (breaking changes) cũng như các lỗi đã biết.

Nếu các bước trên không hiệu quả, bạn có thể cần phải rollback (quay lại) và hạ cấp xuống phiên bản Yarn cũ hơn.

Làm thế nào để update phiên bản Yarn 4?

Các dự án Backstage được tạo bằng @backstage/create-app hiện đã sử dụng Yarn 4. Nếu bạn đang có phiên bản Backstage cũ vẫn dùng Yarn 1 và muốn nâng cấp, bạn có thể tham khảo qua quy trình như sau:

Bỏ qua các tệp không cần thiết (Ignore File Updates)

Trước hết, hãy đảm bảo rằng ứng dụng của bạn đã được cập nhật đầy đủ các mục ignore. Những mục này đã có sẵn trong các dự án mới được tạo, nhưng có thể bị thiếu trong dự án hiện tại của bạn.

Thêm nội dung sau vào .gitignore:

# Yarn files

.pnp.*

.yarn/*

!.yarn/patches

!.yarn/plugins

!.yarn/releases

!.yarn/sdks

!.yarn/versions

Và thêm nội dung này vào .dockerignore:

.yarn/cache

.yarn/install-state.gz

Cài đặt (Installation)

Sau khi đã bỏ qua các tệp không liên quan, bạn tiếp tục tiến hành bước cài đặt, khuyến nghị bạn nên tạo các Git commit riêng biệt cho từng bước, phòng trường hợp cần quay lại để debug. Để cài đặt Yarn 4, hãy chạy lệnh sau trong thư mục gốc của dự án:

yarn set version 4.x

Tiếp theo, bạn cần plugin workspace tools để hỗ trợ quản lý workspace. Cài đặt bằng lệnh:

yarn plugin import @yarnpkg/plugin-workspace-tools

Sau đó, bạn hãy tiến hành cài đặt lại toàn bộ dependencies. Bước này sẽ cập nhật file yarn.lock và chuyển dự án sang sử dụng node-modules làm Yarn node linker. Nếu trước đó bạn có file .yarnrc, hãy xóa nó đi, nhưng nhớ di chuyển các tùy chọn cần thiết sang file .yarnrc.yml. 

Migration Usage

Đến bước này, bạn đã thiết lập xong Yarn 4! Việc còn lại là điều chỉnh các lệnh sử dụng Yarn theo hướng dẫn migration. Các lệnh:

yarn install --frozen-lockfile

cần thay bằng:

yarn install --immutable

Bạn cũng cần cập nhật Dockerfile để sao chép cài đặt Yarn 4 vào trong image:

COPY .yarn ./.yarn

COPY .yarnrc.yml ./

Trong Dockerfile nhiều giai đoạn (multi-stage), mỗi stage chạy lệnh Yarn đều phải có cài đặt Yarn 4. Ví dụ, ở stage cuối bạn có thể thêm:

COPY --from=build --chown=node:node /app/.yarn ./.yarn

COPY --from=build --chown=node:node /app/.yarnrc.yml ./

Thay đổi flag trong Yarn 4 –production của yarn install đã bị loại bỏ. Thay vào đó, hãy dùng:

yarn workspaces focus --all --production

Để tránh cài đặt dependencies cho môi trường phát triển trong bản build production. Tuy nhiên bạn cần lưu ý: yarn workspaces focus không hỗ trợ --immutable.

Ví dụ:

RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)"

Cấu trúc yarn config đã thay đổi: trước đây có thể lưu bất kỳ cặp key-value nào, nhưng nay chỉ hỗ trợ một số tùy chọn cố định. Trường hợp phổ biến là bạn cần thiết lập trình thông dịch Python3 để tránh lỗi với node-gyp. Thêm biến môi trường:

# Chỉ định Python cho node-gyp

ENV PYTHON=/usr/bin/python3

Cài đặt dependencies (ví dụ với sqlite3):

RUN apt-get update && \

    apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \

    rm -rf /var/lib/apt/lists/* && \

    yarn config set python /usr/bin/python3

Bạn nên khai báo biến môi trường PYTHON từ sớm, trước khi bất kỳ lệnh Yarn nào được gọi, vì node-gyp có thể được kích hoạt gián tiếp khi cài đặt một số module.

Nếu dự án của bạn có các CLI tools nội bộ được khai báo trong “bin” của package.json, hãy chắc chắn thêm các package này vào dependencies trong package.json gốc. Điều này giúp Yarn nhận diện và cho phép bạn chạy chúng bằng cú pháp:

yarn <executable>

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

Phiên bản mới nhất của Yarn là gì?

Yarn hiện có hai phiên bản chính là Yarn Classic (1.x) và Yarn Berry/Modern (từ 2.x trở lên). Phiên bản mới nhất thuộc dòng Modern (hiện là 4.x) với nhiều cải tiến về tốc độ, tính năng và bảo mật.

Yarn self-update nghĩa là gì?

Lệnh yarn self-update thường được dùng trong các công cụ khác như Composer (PHP), nhưng với Yarn thì không áp dụng. Để cập nhật Yarn, bạn cần sử dụng trình quản lý gói (npm, corepack, brew, choco…) tùy theo hệ điều hành.

Làm thế nào để update Yarn lên phiên bản mới nhất?

Bất cứ khi nào bạn muốn update Yarn lên phiên bản mới nhất, chỉ cần chạy:

yarn set version stable

yarn install

Yarn sẽ tự động cấu hình dự án để sử dụng bản nhị phân ổn định (stable) mới nhất. Ngoài ra, Yarn cũng thường xuyên phát hành các bản Release Candidate (RC). Nếu bạn cần dùng một tính năng chưa có trong kênh ổn định, hãy chạy câu lệnh:

yarn set version canary

Các bản build này vẫn rất ổn định, điểm khác biệt chủ yếu là quá trình chuyển đổi giữa các phiên bản lớn được thực hiện dần dần khi có thay đổi phá vỡ (breaking changes).

Quá trinh chuyển đổi từ Yarn Classic sang Yarn Berry có khó không?

Việc chuyển đổi thường khá dễ dàng, đặc biệt với các dự án nhỏ. Tuy nhiên, một số dự án lớn hoặc sử dụng plugin, tính năng đặc thù có thể gặp vấn đề tương thích. Yarn đã cung cấp tài liệu chi tiết về migration và khuyến khích kiểm tra kỹ dependencies trước khi nâng cấp để đảm bảo quá trình diễn ra suôn sẻ.

Tại sao Yarn trên npm vẫn ở phiên bản 1x? 

Gói Yarn trên npm vẫn duy trì ở 1.x (Classic) để hỗ trợ tính ổn định cho các dự án cũ. Các phiên bản Yarn mới (2.x trở lên) không còn phát hành trực tiếp qua npm mà quản lý bằng corepack hoặc các cách cài đặt khác. Đây là chủ trương của đội ngũ phát triển nhằm phân tách rõ ràng giữa Yarn Classic và Yarn Modern.

Tổng kết về cách update Yarn

Update yarn không chỉ giúp bạn sử dụng phiên bản mới nhất của công cụ mà còn đảm bảo dự án luôn ổn định, bảo mật và đạt hiệu suất tối ưu. Hy vọng với thông tin hữu ích từ ITviec, bạn có thể dễ dàng cập nhật yarn trên mọi hệ điều hành, đồng thời hạn chế tối đa rủi ro phát sinh. Hãy duy trì thói quen update yarn thường xuyên để nâng cao trải nghiệm phát triển và tối ưu dự án của bạn.

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.