{"id":91784,"date":"2025-09-28T21:11:31","date_gmt":"2025-09-28T14:11:31","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=91784"},"modified":"2025-09-28T21:11:34","modified_gmt":"2025-09-28T14:11:34","slug":"huong-dan-update-yarn","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/","title":{"rendered":"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Yarn_la_gi\" >Yarn l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Cach_cap_nhat_Yarn_trong_toan_cuc_va_trong_mot_du_an_cu_the_Nang_cap_tu_Yarn_1_len_Yarn_2\" >C\u00e1ch c\u1eadp nh\u1eadt Yarn trong to\u00e0n c\u1ee5c v\u00e0 trong m\u1ed9t d\u1ef1 \u00e1n c\u1ee5 th\u1ec3? N\u00e2ng c\u1ea5p t\u1eeb Yarn 1 l\u00ean Yarn 2<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Mot_so_nhung_thay_doi_khi_update_Yarn\" >M\u1ed9t s\u1ed1 nh\u1eefng thay \u0111\u1ed5i khi update Yarn<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Loi_thuong_gap_khi_update_Yarn\" >L\u1ed7i th\u01b0\u1eddng g\u1eb7p khi update Yarn<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Lam_the_nao_de_update_phien_ban_Yarn_4\" >L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 update phi\u00ean b\u1ea3n Yarn 4?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Cac_cau_hoi_thuong_gap_ve_cach_update_Yarn\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 c\u00e1ch update Yarn<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#Tong_ket_ve_cach_update_Yarn\" >T\u1ed5ng k\u1ebft v\u1ec1 c\u00e1ch update Yarn<\/a><\/li><\/ul><\/nav><\/div>\n\n<p><strong><em>Update yarn l\u00e0 b\u01b0\u1edbc quan tr\u1ecdng gi\u00fap nh\u00e0 ph\u00e1t tri\u1ec3n lu\u00f4n \u0111\u1ed3ng b\u1ed9 v\u1edbi c\u00e1c b\u1ea3n v\u00e1, t\u00ednh n\u0103ng m\u1edbi v\u00e0 c\u1ea3i ti\u1ebfn t\u1eeb Yarn. Vi\u1ec7c c\u1eadp nh\u1eadt Yarn \u0111\u00fang c\u00e1ch gi\u00fap \u0111\u1ea3m b\u1ea3o t\u00ednh \u1ed5n \u0111\u1ecbnh, c\u1ea3i thi\u1ec7n hi\u1ec7u su\u1ea5t c\u0169ng nh\u01b0 b\u1ea3o m\u1eadt cho d\u1ef1 \u00e1n.<\/em><\/strong><\/p>\n\n\n\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft sau \u0111\u1ec3 \u0111\u01b0\u1ee3c gi\u1ea3i \u0111\u00e1p chi ti\u1ebft h\u01a1n v\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0110\u00f4i n\u00e9t v\u1ec1 Yarn Classic, Yarn Berry c\u0169ng nh\u01b0 t\u1ea1i sao c\u1ea7n c\u1eadp nh\u1eadt Yarn.<\/li>\n\n\n\n<li>Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt Yarn trong to\u00e0n c\u1ee5c ho\u1eb7c trong m\u1ed9t d\u1ef1 \u00e1n c\u1ee5 th\u1ec3.<\/li>\n\n\n\n<li>M\u1ed9t s\u1ed1 l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi c\u1eadp nh\u1eadt Yarn.<\/li>\n\n\n\n<li>H\u01b0\u1edbng d\u1eabn c\u00e1ch update phi\u00ean b\u1ea3n Yarn 4.<\/li>\n\n\n\n<li>M\u1ed9t s\u1ed1 c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 c\u00e1ch update Yarn.\u00a0<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-yarn-la-gi\"><span class=\"ez-toc-section\" id=\"Yarn_la_gi\"><\/span><strong>Yarn l\u00e0 g\u00ec?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Yarn l\u00e0 m\u1ed9t tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i (package manager) t\u01b0\u01a1ng t\u1ef1 nh\u01b0 npm. Yarn \u0111\u01b0\u1ee3c kh\u1edfi x\u01b0\u1edbng b\u1edfi Facebook v\u00e0 hi\u1ec7n t\u1ea1i \u0111\u00e3 \u0111\u01b0\u1ee3c m\u00e3 ngu\u1ed3n m\u1edf. L\u00fd do ra \u0111\u1eddi c\u1ee7a Yarn l\u00e0 \u0111\u1ec3 c\u1ea3i thi\u1ec7n c\u00e1c v\u1ea5n \u0111\u1ec1 v\u1ec1 hi\u1ec7u n\u0103ng v\u00e0 b\u1ea3o m\u1eadt m\u00e0 npm th\u1eddi \u0111i\u1ec3m \u0111\u00f3 g\u1eb7p ph\u1ea3i. C\u00e1c l\u1ec7nh c\u1ee7a Yarn g\u1ea7n gi\u1ed1ng v\u1edbi npm, n\u00ean vi\u1ec7c l\u00e0m quen kh\u00f4ng t\u1ed1n nhi\u1ec1u th\u1eddi gian. C\u1ea3 hai \u0111\u1ec1u s\u1eed d\u1ee5ng chung file package.json, v\u00ec v\u1eady b\u1ea1n c\u00f3 th\u1ec3 chuy\u1ec3n sang Yarn m\u00e0 kh\u00f4ng c\u1ea7n thay \u0111\u1ed5i c\u1ea5u tr\u00fac d\u1ef1 \u00e1n hi\u1ec7n t\u1ea1i.<\/p>\n\n\n\n<p>Yarn Modern (tr\u01b0\u1edbc \u0111\u00e2y th\u01b0\u1eddng \u0111\u01b0\u1ee3c g\u1ecdi l\u00e0 Yarn Berry t\u1eeb v2 \u0111\u1ebfn v3), l\u00e0 phi\u00ean b\u1ea3n hi\u1ec7n \u0111\u1ea1i c\u1ee7a package manager Yarn (t\u1eeb v2 tr\u1edf \u0111i). Phi\u00ean b\u1ea3n n\u00e0y thay \u0111\u1ed5i ho\u00e0n to\u00e0n c\u00e1ch qu\u1ea3n l\u00fd dependencies b\u1eb1ng c\u00e1ch lo\u1ea1i b\u1ecf ho\u00e0n to\u00e0n th\u01b0 m\u1ee5c node_modules. Ra m\u1eaft n\u0103m 2020 nh\u01b0 m\u1ed9t b\u1ea3n vi\u1ebft l\u1ea1i ho\u00e0n ch\u1ec9nh c\u1ee7a Yarn Classic, Yarn Berry thay th\u1ebf h\u00e0ng ngh\u00ecn t\u1ec7p trong node_modules b\u1eb1ng file .pnp.cjs (c\u00f3 th\u1ec3 c\u00f3 m\u1ed9t s\u1ed1 file ph\u1ee5 tr\u1ee3 kh\u00e1c).<\/p>\n\n\n\n<p>T\u00ednh \u0111\u1ebfn n\u0103m 2025, Yarn \u0111\u00e3 ph\u00e1t tri\u1ec3n l\u00ean phi\u00ean b\u1ea3n 4+ (nay g\u1ecdi l\u00e0 &#8220;Yarn Modern&#8221;) v\u1edbi t\u1ed1c \u0111\u1ed9 nhanh h\u01a1n, engine ki\u1ec3m tra r\u00e0ng bu\u1ed9c (constraints) vi\u1ebft b\u1eb1ng <a href=\"https:\/\/itviec.com\/blog\/javascript-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">JavaScript<\/a>, c\u00f9ng kh\u1ea3 n\u0103ng t\u00edch h\u1ee3p <a href=\"https:\/\/itviec.com\/blog\/nodejs-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Node.js<\/a> t\u1ed1t h\u01a1n th\u00f4ng qua Corepack.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>Xem chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/yarn-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Yarn l\u00e0 g\u00ec: T\u00ecm hi\u1ec3u Yarn Package Manager trong JavaScrip<\/a><\/strong><a href=\"https:\/\/itviec.com\/blog\/yarn-la-gi\/\"><strong>t<\/strong><\/a><\/em><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-t\u1ea1i-sao-c\u1ea7n-update-len-yarn-modern\"><strong>T\u1ea1i sao c\u1ea7n update l\u00ean Yarn Modern?<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>T\u00ednh n\u0103ng m\u1edbi:<\/strong> B\u00ean c\u1ea1nh nh\u1eefng t\u00ednh n\u0103ng quen thu\u1ed9c, Yarn Modern c\u00f2n mang \u0111\u1ebfn nhi\u1ec1u t\u00ednh n\u0103ng m\u1edbi nh\u01b0 yarn dlx, giao th\u1ee9c t\u00edch h\u1ee3p patch:. C\u00f9ng v\u1edbi h\u1ec7 th\u1ed1ng plugin m\u1edf r\u1ed9ng kh\u1ea3 n\u0103ng c\u1ee7a Yarn v\u1edbi changesets, constraints, workspaces,&#8230;<\/li>\n\n\n\n<li><strong>Hi\u1ec7u su\u1ea5t:<\/strong> Yarn Modern \u00e1p d\u1ee5ng chi\u1ebfn l\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t m\u1edbi gi\u00fap d\u1ef1 \u00e1n g\u1ecdn nh\u1eb9 h\u01a1n r\u1ea5t nhi\u1ec1u. V\u00ed d\u1ee5, v\u1edbi c\u1ea5u h\u00ecnh m\u1eb7c \u0111\u1ecbnh, c\u00e1c artifacts c\u1ee7a CRA (Create React App) ch\u1ec9 c\u00f2n 45MB thay v\u00ec 237MB. Hi\u1ec7u n\u0103ng c\u0169ng \u0111\u01b0\u1ee3c c\u1ea3i thi\u1ec7n r\u00f5 r\u1ec7t. Trong m\u1ed9t s\u1ed1 tr\u01b0\u1eddng h\u1ee3p cache \u0111\u00e3 \u0111\u1ea7y \u0111\u1ee7 v\u00e0 kh\u00f4ng c\u00f3 thay \u0111\u1ed5i dependencies, Yarn PnP c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n yarn install t\u1ee9c th\u00ec (0 gi\u00e2y).<\/li>\n\n\n\n<li><strong>Kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng:<\/strong> Ki\u1ebfn tr\u00fac c\u1ee7a Yarn Modern cho ph\u00e9p b\u1ea1n t\u1ef1 x\u00e2y d\u1ef1ng c\u00e1c t\u00ednh n\u0103ng theo nhu c\u1ea7u. Thay v\u00ec ph\u1ea3i ch\u1edd \u0111\u1ed9i ng\u0169 ph\u00e1t tri\u1ec3n ch\u00ednh th\u1ee9c h\u1ed7 tr\u1ee3, gi\u1edd \u0111\u00e2y b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 t\u1ef1 b\u1ed5 sung ch\u1ee9c n\u0103ng theo y\u00eau c\u1ea7u ri\u00eang nh\u01b0 focused workspaces, custom installs, project validation,&#8230;<\/li>\n\n\n\n<li><strong>\u0110\u1ed9 \u1ed5n \u0111\u1ecbnh:<\/strong> Yarn Modern \u0111\u01b0\u1ee3c ph\u00e1t tri\u1ec3n d\u1ef1a tr\u00ean nhi\u1ec1u n\u0103m kinh nghi\u1ec7m duy tr\u00ec Yarn Classic. Nh\u1edd \u0111\u00f3, nh\u1eefng v\u1ea5n \u0111\u1ec1 thi\u1ebft k\u1ebf t\u1ed3n \u0111\u1ecdng \u0111\u00e3 \u0111\u01b0\u1ee3c kh\u1eafc ph\u1ee5c tri\u1ec7t \u0111\u1ec3. C\u00e1c workspaces gi\u1edd \u0111\u00e2y l\u00e0 th\u00e0nh ph\u1ea7n c\u1ed1t l\u00f5i, pipeline gi\u1ea3i quy\u1ebft dependencies \u0111\u01b0\u1ee3c tinh g\u1ecdn, c\u1ea5u tr\u00fac d\u1eef li\u1ec7u t\u1ed1i \u01b0u h\u01a1n,&#8230;\u00a0<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Ti\u00eau ch\u00ed<\/strong><\/td><td><strong>Yarn Classic<\/strong><\/td><td><strong>Yarn Berry<\/strong><\/td><td><strong>Yarn 4 (Modern)<\/strong><\/td><\/tr><tr><td>Th\u1eddi gian ph\u00e1t h\u00e0nh<\/td><td>2016<\/td><td>2020<\/td><td>2024 &#8211; 2025<\/td><\/tr><tr><td>C\u00e1ch c\u00e0i \u0111\u1eb7t<\/td><td>npm install -g yarn<\/td><td>Qua Corepack ho\u1eb7c yarn set version berry<\/td><td>Qua Corepack ho\u1eb7c yarn set version berry<\/td><\/tr><tr><td>Y\u00eau c\u1ea7u Nodejs t\u1ed1i thi\u1ec3u<\/td><td>Node 10+ (t\u01b0\u01a1ng th\u00edch r\u1ed9ng)<\/td><td>Node 12+ (khuy\u00ean d\u00f9ng b\u1ea3n m\u1edbi)<\/td><td>Node 20 tr\u1edf l\u00ean<\/td><\/tr><tr><td>Qu\u1ea3n l\u00fd dependencies<\/td><td>D\u00f9ng node_modules, d\u1ec5 tr\u00f9ng l\u1eb7p, n\u1eb7ng<\/td><td>Plug\u2019n\u2019Play (PnP), kh\u00f4ng d\u00f9ng node_modules, nhanh, nh\u1eb9, ki\u1ec3m tra nghi\u00eam ng\u1eb7t<\/td><td>Ti\u1ebfp t\u1ee5c PnP, th\u00eam plugin, constraints, \u1ed5n \u0111\u1ecbnh h\u01a1n<\/td><\/tr><tr><td>Global packages<\/td><td>C\u00e0i global d\u1ec5 d\u00e0ng, quen thu\u1ed9c<\/td><td>Kh\u00f4ng khuy\u1ebfn kh\u00edch global, qu\u1ea3n l\u00fd theo project<\/td><td>T\u01b0\u01a1ng t\u1ef1 Yarn 2, d\u00f9ng Corepack, qu\u1ea3n l\u00fd theo project<\/td><\/tr><tr><td>File config<\/td><td>.yarnrc, .npmrc<\/td><td>.yarnrc.yml<\/td><td>.yarnrc.yml, h\u1ed7 tr\u1ee3 plugin, constraints n\u00e2ng cao<\/td><\/tr><tr><td>Hoisting<\/td><td>T\u1ef1 \u0111\u1ed9ng hoisting qua node_modules<\/td><td>Lo\u1ea1i b\u1ecf hoisting truy\u1ec1n th\u1ed1ng, dependencies r\u00f5 r\u00e0ng<\/td><td>C\u01a1 ch\u1ebf qu\u1ea3n l\u00fd workspace v\u00e0 dependencies linh ho\u1ea1t, r\u00f5 r\u00e0ng h\u01a1n<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>Xem chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/huong-dan-install-yarn\/\" target=\"_blank\" rel=\"noreferrer noopener\">Install Yarn: H\u01b0\u1edbng d\u1eabn c\u00e0i \u0111\u1eb7t Yarn chi ti\u1ebft cho m\u1ecdi h\u1ec7 \u0111i\u1ec1u h\u00e0n<\/a><\/strong><a href=\"https:\/\/itviec.com\/blog\/huong-dan-install-yarn\/\"><strong>h<\/strong><\/a><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cach-c\u1eadp-nh\u1eadt-yarn-trong-toan-c\u1ee5c-va-trong-m\u1ed9t-d\u1ef1-an-c\u1ee5-th\u1ec3-nang-c\u1ea5p-t\u1eeb-yarn-1-len-yarn-2\"><span class=\"ez-toc-section\" id=\"Cach_cap_nhat_Yarn_trong_toan_cuc_va_trong_mot_du_an_cu_the_Nang_cap_tu_Yarn_1_len_Yarn_2\"><\/span><strong>C\u00e1ch c\u1eadp nh\u1eadt Yarn trong to\u00e0n c\u1ee5c v\u00e0 trong m\u1ed9t d\u1ef1 \u00e1n c\u1ee5 th\u1ec3? N\u00e2ng c\u1ea5p t\u1eeb Yarn 1 l\u00ean Yarn 2<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-c\u1eadp-nh\u1eadt-yarn-toan-b\u1ed9\"><strong>C\u1eadp nh\u1eadt Yarn to\u00e0n b\u1ed9<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ec3 c\u1eadp nh\u1eadt Yarn l\u00ean c\u00e1c phi\u00ean b\u1ea3n hi\u1ec7n \u0111\u1ea1i (v2 tr\u1edf l\u00ean), b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng Corepack, c\u00f4ng c\u1ee5 qu\u1ea3n l\u00fd package manager t\u00edch h\u1ee3p s\u1eb5n trong Node.js hi\u1ec7n \u0111\u1ea1i. \u0110i\u1ec1u n\u00e0y gi\u00fap \u0111\u1ea3m b\u1ea3o d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n lu\u00f4n d\u00f9ng \u0111\u00fang phi\u00ean b\u1ea3n Yarn m\u00e0 kh\u00f4ng c\u1ea7n c\u00e0i \u0111\u1eb7t to\u00e0n c\u1ee5c.<\/p>\n\n\n\n<p>B\u00ean c\u1ea1nh \u0111\u00f3, b\u1ea1n n\u00ean l\u01b0u \u00fd v\u1ec1 phi\u00ean b\u1ea3n Nodejs khi c\u1eadp nh\u1eadt yarn, c\u1ee5 th\u1ec3 nh\u01b0 sau<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Yarn Modern (t\u1eeb phi\u00ean b\u1ea3n v2 tr\u1edf l\u00ean) s\u1ebd y\u00eau c\u1ea7u Node.js \u2265 16.10.<\/li>\n\n\n\n<li>Yarn 4 khuy\u1ebfn ngh\u1ecb Node.js \u2265 18.<\/li>\n\n\n\n<li>N\u1ebfu m\u00f4i tr\u01b0\u1eddng c\u1ee7a b\u1ea1n \u0111ang ch\u1ea1y Node.js th\u1ea5p h\u01a1n c\u00e1c m\u1ee9c tr\u00ean, c\u1ea7n n\u00e2ng c\u1ea5p Node.js tr\u01b0\u1edbc khi ti\u1ebfn h\u00e0nh c\u1eadp nh\u1eadt Yarn \u0111\u1ec3 tr\u00e1nh l\u1ed7i kh\u00f4ng t\u01b0\u01a1ng th\u00edch.<\/li>\n<\/ul>\n\n\n\n<p>\u0110\u1ea7u ti\u00ean, b\u1ea1n k\u00edch ho\u1ea1t corepack b\u1eb1ng c\u00e2u l\u1ec7nh corepack enable. Sau \u0111\u00f3, ch\u1ea1y l\u1ec7nh nh\u01b0 b\u00ean d\u01b0\u1edbi \u0111\u1ec3 c\u00e0i \u0111\u1eb7t phi\u00ean b\u1ea3n b\u1ea1n mu\u1ed1n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn set version stable<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-c\u1eadp-nh\u1eadt-yarn-trong-m\u1ed9t-d\u1ef1-an-c\u1ee5-th\u1ec3\"><strong>C\u1eadp nh\u1eadt Yarn trong m\u1ed9t d\u1ef1 \u00e1n c\u1ee5 th\u1ec3<\/strong><\/h3>\n\n\n\n<p>Yarn policies \u0111\u01b0\u1ee3c t\u1ea1o ra \u0111\u1ec3 n\u00e2ng c\u1ea5p Yarn l\u00ean m\u1ed9t phi\u00ean b\u1ea3n c\u1ee5 th\u1ec3 trong m\u1ed9t d\u1ef1 \u00e1n.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn set version &lt;t\u00ean version&gt;<\/code><\/pre>\n\n\n\n<p>Khi ch\u1ea1y l\u1ec7nh n\u00e0y, phi\u00ean b\u1ea3n Yarn \u0111\u01b0\u1ee3c ch\u1ec9 \u0111\u1ecbnh s\u1ebd t\u1ef1 \u0111\u1ed9ng \u0111\u01b0\u1ee3c t\u1ea3i xu\u1ed1ng t\u1eeb kho l\u01b0u tr\u1eef ch\u00ednh th\u1ee9c tr\u00ean GitHub, v\u00e0 s\u1ed1 phi\u00ean b\u1ea3n trong t\u1ec7p c\u1ea5u h\u00ecnh c\u1ee7a d\u1ef1 \u00e1n s\u1ebd \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt.<\/p>\n\n\n\n<p>Mi\u1ec5n l\u00e0 thay \u0111\u1ed5i n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c th\u00eam v\u00e0 merge v\u00e0o d\u1ef1 \u00e1n, c\u00e1c th\u00e0nh vi\u00ean kh\u00e1c c\u00f9ng l\u00e0m vi\u1ec7c tr\u00ean repository s\u1ebd c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng chung m\u1ed9t phi\u00ean b\u1ea3n Yarn nh\u1ea5t qu\u00e1n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cach-migrate-t\u1eeb-yarn-1-sang-yarn-2\"><strong>C\u00e1ch migrate t\u1eeb Yarn 1 sang Yarn 2<\/strong><\/h3>\n\n\n\n<p>S\u1ebd c\u00f3 nh\u1eefng thay \u0111\u1ed5i l\u1edbn v\u00e0 kh\u00e1c bi\u1ec7t kh\u00f4ng th\u1ec3 tr\u00e1nh kh\u1ecfi gi\u1eefa Yarn 1 (Classic) v\u00e0 Yarn 2. Ch\u1eb3ng h\u1ea1n:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>yarn upgrade<\/code> \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1ed5i th\u00e0nh <code>yarn up<\/code><\/li>\n\n\n\n<li><code>yarn install --production<\/code> nay l\u00e0 <code>yarn workspaces focus --all --production<\/code>, v\u00e0 y\u00eau c\u1ea7u c\u00e0i \u0111\u1eb7t th\u00eam m\u1ed9t plugin ri\u00eang.<\/li>\n<\/ul>\n\n\n\n<p>Do \u0111\u00f3, \u0111\u1ec3 migrate t\u1eeb Yarn 1 sang Yarn 2, b\u1ea1n c\u00f3 th\u1ec3 th\u1ef1c hi\u1ec7n nhanh theo quy tr\u00ecnh nh\u01b0 sau:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00e0i \u0111\u1eb7t Yarn to\u00e0n c\u1ee5c v\u1edbi phi\u00ean b\u1ea3n Yarn 1 m\u1edbi nh\u1ea5t.<\/li>\n\n\n\n<li>Di chuy\u1ec3n v\u00e0o th\u01b0 m\u1ee5c d\u1ef1 \u00e1n b\u1eb1ng terminal.<\/li>\n\n\n\n<li>Trong th\u01b0 m\u1ee5c d\u1ef1 \u00e1n, \u0111\u1eb7t phi\u00ean b\u1ea3n Yarn th\u00e0nh V2 v\u1edbi l\u1ec7nh: yarn set version berry.<\/li>\n\n\n\n<li>Sau \u0111\u00f3, ch\u1ea1y l\u1ec7nh yarn install l\u00e0 ho\u00e0n th\u00e0nh.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-m\u1ed9t-s\u1ed1-nh\u1eefng-thay-d\u1ed5i-khi-update-yarn\"><span class=\"ez-toc-section\" id=\"Mot_so_nhung_thay_doi_khi_update_Yarn\"><\/span><strong>M\u1ed9t s\u1ed1 nh\u1eefng thay \u0111\u1ed5i khi update Yarn<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-c\u1eadp-nh\u1eadt-c\u1ea5u-hinh-sang-thi\u1ebft-l\u1eadp-m\u1edbi\"><strong>C\u1eadp nh\u1eadt c\u1ea5u h\u00ecnh sang thi\u1ebft l\u1eadp m\u1edbi<\/strong><\/h3>\n\n\n\n<p>Yarn Modern s\u1eed d\u1ee5ng ki\u1ec3u file c\u1ea5u h\u00ecnh kh\u00e1c so v\u1edbi Yarn Classic. V\u1edbi lockfile th\u00ec h\u1ea7u nh\u01b0 kh\u00f4ng \u1ea3nh h\u01b0\u1edfng (v\u00ec Yarn s\u1ebd t\u1ef1 \u0111\u1ed9ng chuy\u1ec3n \u0111\u1ed5i), nh\u01b0ng c\u00f3 th\u1ec3 g\u00e2y ra v\u1ea5n \u0111\u1ec1 n\u1ebfu b\u1ea1n v\u1eabn d\u1ef1a v\u00e0o .npmrc ho\u1eb7c .yarnrc.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Yarn Modern gi\u1edd \u0111\u00e2y ch\u1ec9 s\u1eed d\u1ee5ng .yarnrc.yml.<\/li>\n\n\n\n<li>T\u1ea5t c\u1ea3 c\u00e1c file c\u1ea5u h\u00ecnh kh\u00e1c (bao g\u1ed3m c\u1ea3 .npmrc) \u0111\u1ec1u b\u1ecb b\u1ecf qua.<\/li>\n\n\n\n<li>\u0110\u1ecbnh d\u1ea1ng file c\u1ea5u h\u00ecnh chuy\u1ec3n sang YAML thay v\u00ec JSON.<\/li>\n\n\n\n<li>H\u1ea7u h\u1ebft c\u00e1c key c\u1ea5u h\u00ecnh c\u0169ng \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u1ed5i t\u00ean \u0111\u1ec3 \u0111\u1ed3ng b\u1ed9 v\u00e0 r\u00f5 r\u00e0ng h\u01a1n.<\/li>\n<\/ul>\n\n\n\n<p>M\u1ed9t s\u1ed1 thay \u0111\u1ed5i quan tr\u1ecdng:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Custom registries gi\u1edd \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh qua <code>npmRegistryServer<\/code>.<\/li>\n\n\n\n<li>Registry authentication tokens gi\u1edd c\u1ea5u h\u00ecnh qua <code>npmAuthToken<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ro-rang-v\u1ec1-script-pre-va-post\"><strong>R\u00f5 r\u00e0ng v\u1ec1 script pre v\u00e0 post<\/strong><\/h3>\n\n\n\n<p>Yarn Modern thay \u0111\u1ed5i c\u00e1ch x\u1eed l\u00fd lifecycle scripts \u0111\u1ec3 m\u1ee5c \u0111\u00edch r\u00f5 r\u00e0ng h\u01a1n v\u00e0 lo\u1ea1i b\u1ecf c\u00e1c h\u00e0nh vi g\u00e2y nh\u1ea7m l\u1eabn. \u0110i\u1ec3m kh\u00e1c bi\u1ec7t l\u00e0 c\u00e1c custom pre v\u00e0 post script kh\u00f4ng c\u00f2n \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3. Do \u0111\u00f3, b\u1ea1n c\u1ea7n vi\u1ebft l\u1ea1i nh\u01b0 sau:<\/p>\n\n\n\n<p>Tr\u01b0\u1edbc \u0111\u00e2y:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\u00a0\u00a0\"scripts\": {\n\u00a0\u00a0\u00a0\u00a0\"prestart\": \"do-something\",\n\u00a0\u00a0\u00a0\u00a0\"start\": \"http-server\"\n\u00a0\u00a0}\n}<\/code><\/pre>\n\n\n\n<p>B\u00e2y gi\u1edd:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n\u00a0\u00a0\"scripts\": {\n\u00a0\u00a0\u00a0\u00a0\"prestart\": \"do-something\",\n\u00a0\u00a0\u00a0\u00a0\"start\": \"yarn prestart &amp;&amp; http-server\"\n\u00a0\u00a0}\n}<\/code><\/pre>\n\n\n\n<p>B\u1ea1n n\u00ean l\u01b0u \u00fd r\u1eb1ng \u0111i\u1ec1u n\u00e0y ch\u1ec9 \u00e1p d\u1ee5ng v\u1edbi user scripts (nh\u01b0 start v\u00e0 c\u00e1c script t\u00f9y ch\u1ec9nh). C\u00e1c script g\u1ed1c c\u1ee7a Yarn nh\u01b0 <code>preinstall<\/code>, <code>install<\/code>, <code>postinstall<\/code> v\u1eabn d\u00f9ng b\u00ecnh th\u01b0\u1eddng.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-s\u1eed-d\u1ee5ng-yarn-dlx-thay-cho-yarn-global\"><strong>S\u1eed d\u1ee5ng yarn dlx thay cho yarn global<\/strong><\/h3>\n\n\n\n<p>Yarn t\u1eadp trung v\u00e0o qu\u1ea3n l\u00fd d\u1ef1 \u00e1n, v\u00e0 vi\u1ec7c qu\u1ea3n l\u00fd c\u00e1c g\u00f3i c\u00e0i \u0111\u1eb7t to\u00e0n h\u1ec7 th\u1ed1ng \u0111\u01b0\u1ee3c xem l\u00e0 ngo\u00e0i ph\u1ea1m vi h\u1ed7 tr\u1ee3. V\u00ec l\u00fd do \u0111\u00f3, l\u1ec7nh yarn global \u0111\u00e3 b\u1ecb lo\u1ea1i b\u1ecf. Thay v\u00e0o \u0111\u00f3, b\u1ea1n c\u1ea7n d\u00f9ng l\u1ec7nh yarn dlx \u0111\u1ec3 ch\u1ea1y c\u00e1c script t\u1ea1m th\u1eddi, d\u00f9ng m\u1ed9t l\u1ea7n.<\/p>\n\n\n\n<p>V\u00ed d\u1ee5, b\u1ea1n kh\u1edfi ch\u1ea1y <code>create-react-app<\/code> \u0111\u1ec3 kh\u1edfi t\u1ea1o m\u1ed9t project React m\u1edbi.\u00a0<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn dlx create-react-app my-app<\/code><\/pre>\n\n\n\n<p>Sau \u0111\u00f3, ch\u1ea1y eslint \u0111\u1ec3 ki\u1ec3m tra m\u00e3 ngu\u1ed3n m\u1ed9t l\u1ea7n m\u00e0 kh\u00f4ng c\u00e0i v\u0129nh vi\u1ec5n v\u00e0 c\u00e0i \u0111\u1eb7t m\u1ed9t d\u1ef1 \u00e1n Nextjs ph\u00f9 h\u1ee3p.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn dlx eslint<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-khong-s\u1eed-d\u1ee5ng-bundledependencies\"><strong>Kh\u00f4ng s\u1eed d\u1ee5ng bundleDependencies<\/strong><\/h3>\n\n\n\n<p>Tr\u01b0\u1eddng bundleDependencies (ho\u1eb7c bundledDependencies) l\u00e0 m\u1ed9t t\u00ednh n\u0103ng c\u0169, cho ph\u00e9p \u0111\u1ecbnh ngh\u0129a m\u1ed9t t\u1eadp h\u1ee3p package s\u1ebd \u0111\u01b0\u1ee3c l\u01b0u nguy\u00ean v\u1eb9n trong package archive (bao g\u1ed3m c\u1ea3 node_modules). Tuy nhi\u00ean, t\u00ednh n\u0103ng n\u00e0y c\u00f3 nhi\u1ec1u v\u1ea5n \u0111\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ph\u1ee5 thu\u1ed9c v\u00e0o node_modules, trong khi Plug&#8217;n&#8217;Play kh\u00f4ng c\u00f3 th\u01b0 m\u1ee5c n\u00e0y.<\/li>\n\n\n\n<li>\u00c9p c\u00e1ch hoisting (n\u00e2ng dependency l\u00ean) ngay trong package, g\u00e2y xung \u0111\u1ed9t v\u1edbi c\u01a1 ch\u1ebf hoisting t\u1eeb c\u00e1c package kh\u00e1c.<\/li>\n<\/ul>\n\n\n\n<p>B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00e1c c\u00e1ch thay th\u1ebf:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>N\u1ebfu b\u1ea1n c\u1ea7n patch m\u1ed9t package, h\u00e3y fork n\u00f3 ho\u1eb7c tham chi\u1ebfu qua giao th\u1ee9c file (v\u1eabn ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng k\u1ec3 c\u1ea3 cho transitive dependencies). Ngo\u00e0i ra c\u00f3 th\u1ec3 d\u00f9ng giao th\u1ee9c portal: ho\u1eb7c patch:, nh\u01b0ng l\u01b0u \u00fd ch\u00fang ch\u1ec9 ho\u1ea1t \u0111\u1ed9ng cho Yarn.<\/li>\n\n\n\n<li>N\u1ebfu b\u1ea1n c\u1ea7n ph\u00e1t h\u00e0nh m\u1ed9t package cho kh\u00e1ch h\u00e0ng \u1edf d\u1ea1ng standalone (kh\u00f4ng ph\u1ee5 thu\u1ed9c g\u00ec kh\u00e1c), h\u00e3y t\u1ef1 bundle n\u00f3 b\u1eb1ng c\u00f4ng c\u1ee5 nh\u01b0 Esbuild, Webpack, Rollup ho\u1eb7c t\u01b0\u01a1ng t\u1ef1.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-thay-nohoist-b\u1eb1ng-nmhoistinglimits\"><strong>Thay nohoist b\u1eb1ng nmHoistingLimits<\/strong><\/h3>\n\n\n\n<p>Thi\u1ebft l\u1eadp nohoist trong Yarn Classic \u0111\u01b0\u1ee3c t\u1ea1o ra \u0111\u1ec3 h\u1ed7 tr\u1ee3 React Native khi d\u00f9ng workspaces. Tuy nhi\u00ean, c\u00e1ch n\u00f3 ho\u1ea1t \u0111\u1ed9ng (d\u1ef1a tr\u00ean glob patterns) g\u00e2y ra nhi\u1ec1u l\u1ed7i v\u00e0 nh\u1ea7m l\u1eabn, b\u1edfi kh\u00f4ng ai ch\u1eafc ch\u1eafn pattern n\u00e0o c\u1ea7n \u0111\u01b0\u1ee3c c\u1ea5u h\u00ecnh. Trong Yarn Modern, t\u00ednh n\u0103ng n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u01a1n gi\u1ea3n h\u00f3a v\u00e0 ch\u1ec9 h\u1ed7 tr\u1ee3 3 pattern x\u00e1c \u0111\u1ecbnh s\u1eb5n.<\/p>\n\n\n\n<p>N\u1ebfu tr\u01b0\u1edbc \u0111\u00e2y b\u1ea1n d\u00f9ng nohoist, h\u00e3y x\u00f3a n\u00f3 kh\u1ecfi c\u1ea5u h\u00ecnh trong manifest v\u00e0 thay b\u1eb1ng vi\u1ec7c thi\u1ebft l\u1eadp nmHoistingLimits trong file .yarnrc.yml:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nmHoistingLimits: workspaces<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-l\u1ed7i-th\u01b0\u1eddng-g\u1eb7p-khi-update-yarn\"><span class=\"ez-toc-section\" id=\"Loi_thuong_gap_khi_update_Yarn\"><\/span><strong>L\u1ed7i th\u01b0\u1eddng g\u1eb7p khi update Yarn<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Khi n\u00e2ng c\u1ea5p Yarn, b\u1ea1n v\u1eabn c\u00f3 th\u1ec3 g\u1eb7p m\u1ed9t s\u1ed1 v\u1ea5n \u0111\u1ec1. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t s\u1ed1 c\u00e1ch b\u1ea1n c\u00f3 th\u1ec3 th\u1eed \u0111\u1ec3 kh\u1eafc ph\u1ee5c:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ch\u1ea1y l\u1ea1i l\u1ec7nh <code>yarn install<\/code> \u0111\u1ec3 c\u00e0i \u0111\u1eb7t l\u1ea1i to\u00e0n b\u1ed9 dependencies c\u1ee7a d\u1ef1 \u00e1n; b\u01b0\u1edbc n\u00e0y c\u00f3 th\u1ec3 gi\u00fap gi\u1ea3i quy\u1ebft c\u00e1c v\u1ea5n \u0111\u1ec1 v\u1ec1 t\u01b0\u01a1ng th\u00edch.<\/li>\n\n\n\n<li>Ki\u1ec3m tra l\u1ea1i file yarn.lock \u0111\u1ec3 ch\u1eafc ch\u1eafn r\u1eb1ng n\u1ed9i dung trong \u0111\u00f3 \u0111\u00fang nh\u01b0 b\u1ea1n mong \u0111\u1ee3i.<\/li>\n\n\n\n<li>Tham kh\u1ea3o release notes (ghi ch\u00fa ph\u00e1t h\u00e0nh) c\u1ee7a Yarn v\u00e0 phi\u00ean b\u1ea3n m\u1edbi \u0111\u1ec3 n\u1eafm \u0111\u01b0\u1ee3c c\u00e1c thay \u0111\u1ed5i l\u1edbn (breaking changes) c\u0169ng nh\u01b0 c\u00e1c l\u1ed7i \u0111\u00e3 bi\u1ebft.<\/li>\n<\/ul>\n\n\n\n<p>N\u1ebfu c\u00e1c b\u01b0\u1edbc tr\u00ean kh\u00f4ng hi\u1ec7u qu\u1ea3, b\u1ea1n c\u00f3 th\u1ec3 c\u1ea7n ph\u1ea3i rollback (quay l\u1ea1i) v\u00e0 h\u1ea1 c\u1ea5p xu\u1ed1ng phi\u00ean b\u1ea3n Yarn c\u0169 h\u01a1n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-lam-th\u1ebf-nao-d\u1ec3-update-phien-b\u1ea3n-yarn-4\"><span class=\"ez-toc-section\" id=\"Lam_the_nao_de_update_phien_ban_Yarn_4\"><\/span><strong>L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 update phi\u00ean b\u1ea3n Yarn 4?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>C\u00e1c d\u1ef1 \u00e1n Backstage \u0111\u01b0\u1ee3c t\u1ea1o b\u1eb1ng <code>@backstage\/create-app<\/code> hi\u1ec7n \u0111\u00e3 s\u1eed d\u1ee5ng Yarn 4. N\u1ebfu b\u1ea1n \u0111ang c\u00f3 phi\u00ean b\u1ea3n Backstage c\u0169 v\u1eabn d\u00f9ng Yarn 1 v\u00e0 mu\u1ed1n n\u00e2ng c\u1ea5p, b\u1ea1n c\u00f3 th\u1ec3 tham kh\u1ea3o qua quy tr\u00ecnh nh\u01b0 sau:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-b\u1ecf-qua-cac-t\u1ec7p-khong-c\u1ea7n-thi\u1ebft-ignore-file-updates\"><strong>B\u1ecf qua c\u00e1c t\u1ec7p kh\u00f4ng c\u1ea7n thi\u1ebft (Ignore File Updates)<\/strong><\/h3>\n\n\n\n<p>Tr\u01b0\u1edbc h\u1ebft, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n \u0111\u00e3 \u0111\u01b0\u1ee3c c\u1eadp nh\u1eadt \u0111\u1ea7y \u0111\u1ee7 c\u00e1c m\u1ee5c ignore. Nh\u1eefng m\u1ee5c n\u00e0y \u0111\u00e3 c\u00f3 s\u1eb5n trong c\u00e1c d\u1ef1 \u00e1n m\u1edbi \u0111\u01b0\u1ee3c t\u1ea1o, nh\u01b0ng c\u00f3 th\u1ec3 b\u1ecb thi\u1ebfu trong d\u1ef1 \u00e1n hi\u1ec7n t\u1ea1i c\u1ee7a b\u1ea1n.<\/p>\n\n\n\n<p>Th\u00eam n\u1ed9i dung sau v\u00e0o .gitignore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Yarn files\n\n.pnp.*\n\n.yarn\/*\n\n!.yarn\/patches\n\n!.yarn\/plugins\n\n!.yarn\/releases\n\n!.yarn\/sdks\n\n!.yarn\/versions<\/code><\/pre>\n\n\n\n<p>V\u00e0 th\u00eam n\u1ed9i dung n\u00e0y v\u00e0o .dockerignore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.yarn\/cache\n\n.yarn\/install-state.gz<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cai-d\u1eb7t-installation\"><strong>C\u00e0i \u0111\u1eb7t (Installation)<\/strong><\/h3>\n\n\n\n<p>Sau khi \u0111\u00e3 b\u1ecf qua c\u00e1c t\u1ec7p kh\u00f4ng li\u00ean quan, b\u1ea1n ti\u1ebfp t\u1ee5c ti\u1ebfn h\u00e0nh b\u01b0\u1edbc c\u00e0i \u0111\u1eb7t, khuy\u1ebfn ngh\u1ecb b\u1ea1n n\u00ean t\u1ea1o c\u00e1c Git commit ri\u00eang bi\u1ec7t cho t\u1eebng b\u01b0\u1edbc, ph\u00f2ng tr\u01b0\u1eddng h\u1ee3p c\u1ea7n quay l\u1ea1i \u0111\u1ec3 debug. \u0110\u1ec3 c\u00e0i \u0111\u1eb7t Yarn 4, h\u00e3y ch\u1ea1y l\u1ec7nh sau trong th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a d\u1ef1 \u00e1n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn set version 4.x<\/code><\/pre>\n\n\n\n<p>Ti\u1ebfp theo, b\u1ea1n c\u1ea7n plugin workspace tools \u0111\u1ec3 h\u1ed7 tr\u1ee3 qu\u1ea3n l\u00fd workspace. C\u00e0i \u0111\u1eb7t b\u1eb1ng l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn plugin import @yarnpkg\/plugin-workspace-tools<\/code><\/pre>\n\n\n\n<p>Sau \u0111\u00f3, b\u1ea1n h\u00e3y ti\u1ebfn h\u00e0nh c\u00e0i \u0111\u1eb7t l\u1ea1i to\u00e0n b\u1ed9 dependencies. B\u01b0\u1edbc n\u00e0y s\u1ebd c\u1eadp nh\u1eadt file yarn.lock v\u00e0 chuy\u1ec3n d\u1ef1 \u00e1n sang s\u1eed d\u1ee5ng node-modules l\u00e0m Yarn node linker. N\u1ebfu tr\u01b0\u1edbc \u0111\u00f3 b\u1ea1n c\u00f3 file .yarnrc, h\u00e3y x\u00f3a n\u00f3 \u0111i, nh\u01b0ng nh\u1edb di chuy\u1ec3n c\u00e1c t\u00f9y ch\u1ecdn c\u1ea7n thi\u1ebft sang file .yarnrc.yml.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-migration-usage\"><strong>Migration Usage<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ebfn b\u01b0\u1edbc n\u00e0y, b\u1ea1n \u0111\u00e3 thi\u1ebft l\u1eadp xong Yarn 4! Vi\u1ec7c c\u00f2n l\u1ea1i l\u00e0 \u0111i\u1ec1u ch\u1ec9nh c\u00e1c l\u1ec7nh s\u1eed d\u1ee5ng Yarn theo h\u01b0\u1edbng d\u1eabn migration. C\u00e1c l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn install --frozen-lockfile<\/code><\/pre>\n\n\n\n<p>c\u1ea7n thay b\u1eb1ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn install --immutable<\/code><\/pre>\n\n\n\n<p>B\u1ea1n c\u0169ng c\u1ea7n c\u1eadp nh\u1eadt Dockerfile \u0111\u1ec3 sao ch\u00e9p c\u00e0i \u0111\u1eb7t Yarn 4 v\u00e0o trong image:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COPY .yarn .\/.yarn\n\nCOPY .yarnrc.yml .\/<\/code><\/pre>\n\n\n\n<p>Trong Dockerfile nhi\u1ec1u giai \u0111o\u1ea1n (multi-stage), m\u1ed7i stage ch\u1ea1y l\u1ec7nh Yarn \u0111\u1ec1u ph\u1ea3i c\u00f3 c\u00e0i \u0111\u1eb7t Yarn 4. V\u00ed d\u1ee5, \u1edf stage cu\u1ed1i b\u1ea1n c\u00f3 th\u1ec3 th\u00eam:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>COPY --from=build --chown=node:node \/app\/.yarn .\/.yarn\n\nCOPY --from=build --chown=node:node \/app\/.yarnrc.yml .\/<\/code><\/pre>\n\n\n\n<p>Thay \u0111\u1ed5i flag trong Yarn 4 &#8211;production c\u1ee7a yarn install \u0111\u00e3 b\u1ecb lo\u1ea1i b\u1ecf. Thay v\u00e0o \u0111\u00f3, h\u00e3y d\u00f9ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn workspaces focus --all --production<\/code><\/pre>\n\n\n\n<p>\u0110\u1ec3 tr\u00e1nh c\u00e0i \u0111\u1eb7t dependencies cho m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n trong b\u1ea3n build production. Tuy nhi\u00ean b\u1ea1n c\u1ea7n l\u01b0u \u00fd: yarn workspaces focus kh\u00f4ng h\u1ed7 tr\u1ee3 <code>--immutable<\/code>.<\/p>\n\n\n\n<p>V\u00ed d\u1ee5:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RUN yarn workspaces focus --all --production &amp;&amp; rm -rf \"$(yarn cache clean)\"<\/code><\/pre>\n\n\n\n<p>C\u1ea5u tr\u00fac yarn config \u0111\u00e3 thay \u0111\u1ed5i: tr\u01b0\u1edbc \u0111\u00e2y c\u00f3 th\u1ec3 l\u01b0u b\u1ea5t k\u1ef3 c\u1eb7p key-value n\u00e0o, nh\u01b0ng nay ch\u1ec9 h\u1ed7 tr\u1ee3 m\u1ed9t s\u1ed1 t\u00f9y ch\u1ecdn c\u1ed1 \u0111\u1ecbnh. Tr\u01b0\u1eddng h\u1ee3p ph\u1ed5 bi\u1ebfn l\u00e0 b\u1ea1n c\u1ea7n thi\u1ebft l\u1eadp tr\u00ecnh th\u00f4ng d\u1ecbch Python3 \u0111\u1ec3 tr\u00e1nh l\u1ed7i v\u1edbi node-gyp. Th\u00eam bi\u1ebfn m\u00f4i tr\u01b0\u1eddng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Ch\u1ec9 \u0111\u1ecbnh Python cho node-gyp\n\nENV PYTHON=\/usr\/bin\/python3<\/code><\/pre>\n\n\n\n<p>C\u00e0i \u0111\u1eb7t dependencies (v\u00ed d\u1ee5 v\u1edbi sqlite3):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>RUN apt-get update &amp;&amp; \\\n\n\u00a0\u00a0\u00a0\u00a0apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential &amp;&amp; \\\n\n\u00a0\u00a0\u00a0\u00a0rm -rf \/var\/lib\/apt\/lists\/* &amp;&amp; \\\n\n\u00a0\u00a0\u00a0\u00a0yarn config set python \/usr\/bin\/python3<\/code><\/pre>\n\n\n\n<p>B\u1ea1n n\u00ean khai b\u00e1o bi\u1ebfn m\u00f4i tr\u01b0\u1eddng PYTHON t\u1eeb s\u1edbm, tr\u01b0\u1edbc khi b\u1ea5t k\u1ef3 l\u1ec7nh Yarn n\u00e0o \u0111\u01b0\u1ee3c g\u1ecdi, v\u00ec node-gyp c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c k\u00edch ho\u1ea1t gi\u00e1n ti\u1ebfp khi c\u00e0i \u0111\u1eb7t m\u1ed9t s\u1ed1 module.<\/p>\n\n\n\n<p>N\u1ebfu d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n c\u00f3 c\u00e1c CLI tools n\u1ed9i b\u1ed9 \u0111\u01b0\u1ee3c khai b\u00e1o trong &#8220;bin&#8221; c\u1ee7a package.json, h\u00e3y ch\u1eafc ch\u1eafn th\u00eam c\u00e1c package n\u00e0y v\u00e0o dependencies trong package.json g\u1ed1c. \u0110i\u1ec1u n\u00e0y gi\u00fap Yarn nh\u1eadn di\u1ec7n v\u00e0 cho ph\u00e9p b\u1ea1n ch\u1ea1y ch\u00fang b\u1eb1ng c\u00fa ph\u00e1p:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn &lt;executable&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-cau-h\u1ecfi-th\u01b0\u1eddng-g\u1eb7p-v\u1ec1-cach-update-yarn\"><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_thuong_gap_ve_cach_update_Yarn\"><\/span><strong>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 c\u00e1ch update Yarn<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-phien-b\u1ea3n-m\u1edbi-nh\u1ea5t-c\u1ee7a-yarn-la-gi\"><strong>Phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t c\u1ee7a Yarn l\u00e0 g\u00ec?<\/strong><\/h3>\n\n\n\n<p>Yarn hi\u1ec7n c\u00f3 hai phi\u00ean b\u1ea3n ch\u00ednh l\u00e0 Yarn Classic (1.x) v\u00e0 Yarn Berry\/Modern (t\u1eeb 2.x tr\u1edf l\u00ean). Phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t thu\u1ed9c d\u00f2ng Modern (hi\u1ec7n l\u00e0 4.x) v\u1edbi nhi\u1ec1u c\u1ea3i ti\u1ebfn v\u1ec1 t\u1ed1c \u0111\u1ed9, t\u00ednh n\u0103ng v\u00e0 b\u1ea3o m\u1eadt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-yarn-self-update-nghia-la-gi\"><strong>Yarn self-update ngh\u0129a l\u00e0 g\u00ec?<\/strong><\/h3>\n\n\n\n<p>L\u1ec7nh<strong> yarn self-update<\/strong> th\u01b0\u1eddng \u0111\u01b0\u1ee3c d\u00f9ng trong c\u00e1c c\u00f4ng c\u1ee5 kh\u00e1c nh\u01b0 Composer (PHP), nh\u01b0ng v\u1edbi <strong>Yarn th\u00ec kh\u00f4ng \u00e1p d\u1ee5ng<\/strong>. \u0110\u1ec3 c\u1eadp nh\u1eadt Yarn, b\u1ea1n c\u1ea7n s\u1eed d\u1ee5ng tr\u00ecnh qu\u1ea3n l\u00fd g\u00f3i (npm, corepack, brew, choco&#8230;) t\u00f9y theo h\u1ec7 \u0111i\u1ec1u h\u00e0nh.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-lam-th\u1ebf-nao-d\u1ec3-update-yarn-len-phien-b\u1ea3n-m\u1edbi-nh\u1ea5t\"><strong>L\u00e0m th\u1ebf n\u00e0o \u0111\u1ec3 update Yarn l\u00ean phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t?<\/strong><\/h3>\n\n\n\n<p>B\u1ea5t c\u1ee9 khi n\u00e0o b\u1ea1n mu\u1ed1n update Yarn l\u00ean phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t, ch\u1ec9 c\u1ea7n ch\u1ea1y:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn set version stable\n\nyarn install<\/code><\/pre>\n\n\n\n<p>Yarn s\u1ebd t\u1ef1 \u0111\u1ed9ng c\u1ea5u h\u00ecnh d\u1ef1 \u00e1n \u0111\u1ec3 s\u1eed d\u1ee5ng b\u1ea3n nh\u1ecb ph\u00e2n \u1ed5n \u0111\u1ecbnh (stable) m\u1edbi nh\u1ea5t. Ngo\u00e0i ra, Yarn c\u0169ng th\u01b0\u1eddng xuy\u00ean ph\u00e1t h\u00e0nh c\u00e1c b\u1ea3n Release Candidate (RC). N\u1ebfu b\u1ea1n c\u1ea7n d\u00f9ng m\u1ed9t t\u00ednh n\u0103ng ch\u01b0a c\u00f3 trong k\u00eanh \u1ed5n \u0111\u1ecbnh, h\u00e3y ch\u1ea1y c\u00e2u l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yarn set version canary<\/code><\/pre>\n\n\n\n<p>C\u00e1c b\u1ea3n build n\u00e0y v\u1eabn r\u1ea5t \u1ed5n \u0111\u1ecbnh, \u0111i\u1ec3m kh\u00e1c bi\u1ec7t ch\u1ee7 y\u1ebfu l\u00e0 qu\u00e1 tr\u00ecnh chuy\u1ec3n \u0111\u1ed5i gi\u1eefa c\u00e1c phi\u00ean b\u1ea3n l\u1edbn \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n d\u1ea7n d\u1ea7n khi c\u00f3 thay \u0111\u1ed5i ph\u00e1 v\u1ee1 (breaking changes).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-qua-trinh-chuy\u1ec3n-d\u1ed5i-t\u1eeb-yarn-classic-sang-yarn-berry-co-kho-khong\"><strong>Qu\u00e1 trinh chuy\u1ec3n \u0111\u1ed5i t\u1eeb Yarn Classic sang Yarn Berry c\u00f3 kh\u00f3 kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i th\u01b0\u1eddng kh\u00e1 d\u1ec5 d\u00e0ng, \u0111\u1eb7c bi\u1ec7t v\u1edbi c\u00e1c d\u1ef1 \u00e1n nh\u1ecf. Tuy nhi\u00ean, m\u1ed9t s\u1ed1 d\u1ef1 \u00e1n l\u1edbn ho\u1eb7c s\u1eed d\u1ee5ng plugin, t\u00ednh n\u0103ng \u0111\u1eb7c th\u00f9 c\u00f3 th\u1ec3 g\u1eb7p v\u1ea5n \u0111\u1ec1 t\u01b0\u01a1ng th\u00edch. Yarn \u0111\u00e3 cung c\u1ea5p t\u00e0i li\u1ec7u chi ti\u1ebft v\u1ec1 migration v\u00e0 khuy\u1ebfn kh\u00edch ki\u1ec3m tra k\u1ef9 dependencies tr\u01b0\u1edbc khi n\u00e2ng c\u1ea5p \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o qu\u00e1 tr\u00ecnh di\u1ec5n ra su\u00f4n s\u1ebb.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-t\u1ea1i-sao-yarn-tren-npm-v\u1eabn-\u1edf-phien-b\u1ea3n-1x\"><strong>T\u1ea1i sao Yarn tr\u00ean npm v\u1eabn \u1edf phi\u00ean b\u1ea3n 1x?\u00a0<\/strong><\/h3>\n\n\n\n<p>G\u00f3i Yarn tr\u00ean npm v\u1eabn duy tr\u00ec \u1edf 1.x (Classic) \u0111\u1ec3 h\u1ed7 tr\u1ee3 t\u00ednh \u1ed5n \u0111\u1ecbnh cho c\u00e1c d\u1ef1 \u00e1n c\u0169. C\u00e1c phi\u00ean b\u1ea3n Yarn m\u1edbi (2.x tr\u1edf l\u00ean) kh\u00f4ng c\u00f2n ph\u00e1t h\u00e0nh tr\u1ef1c ti\u1ebfp qua npm m\u00e0 qu\u1ea3n l\u00fd b\u1eb1ng corepack ho\u1eb7c c\u00e1c c\u00e1ch c\u00e0i \u0111\u1eb7t kh\u00e1c. \u0110\u00e2y l\u00e0 ch\u1ee7 tr\u01b0\u01a1ng c\u1ee7a \u0111\u1ed9i ng\u0169 ph\u00e1t tri\u1ec3n nh\u1eb1m ph\u00e2n t\u00e1ch r\u00f5 r\u00e0ng gi\u1eefa Yarn Classic v\u00e0 Yarn Modern.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-k\u1ebft-v\u1ec1-cach-update-yarn\"><span class=\"ez-toc-section\" id=\"Tong_ket_ve_cach_update_Yarn\"><\/span><strong>T\u1ed5ng k\u1ebft v\u1ec1 c\u00e1ch update Yarn<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>Update yarn<\/strong> kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n s\u1eed d\u1ee5ng phi\u00ean b\u1ea3n m\u1edbi nh\u1ea5t c\u1ee7a c\u00f4ng c\u1ee5 m\u00e0 c\u00f2n \u0111\u1ea3m b\u1ea3o d\u1ef1 \u00e1n lu\u00f4n \u1ed5n \u0111\u1ecbnh, b\u1ea3o m\u1eadt v\u00e0 \u0111\u1ea1t hi\u1ec7u su\u1ea5t t\u1ed1i \u01b0u. Hy v\u1ecdng v\u1edbi th\u00f4ng tin h\u1eefu \u00edch t\u1eeb ITviec, b\u1ea1n c\u00f3 th\u1ec3 d\u1ec5 d\u00e0ng c\u1eadp nh\u1eadt yarn tr\u00ean m\u1ecdi h\u1ec7 \u0111i\u1ec1u h\u00e0nh, \u0111\u1ed3ng th\u1eddi h\u1ea1n ch\u1ebf t\u1ed1i \u0111a r\u1ee7i ro ph\u00e1t sinh. H\u00e3y duy tr\u00ec th\u00f3i quen update yarn th\u01b0\u1eddng xuy\u00ean \u0111\u1ec3 n\u00e2ng cao tr\u1ea3i nghi\u1ec7m ph\u00e1t tri\u1ec3n v\u00e0 t\u1ed1i \u01b0u d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update yarn l\u00e0 b\u01b0\u1edbc quan tr\u1ecdng gi\u00fap nh\u00e0 ph\u00e1t tri\u1ec3n lu\u00f4n \u0111\u1ed3ng b\u1ed9 v\u1edbi c\u00e1c b\u1ea3n v\u00e1, t\u00ednh n\u0103ng m\u1edbi v\u00e0 c\u1ea3i ti\u1ebfn t\u1eeb Yarn. Vi\u1ec7c c\u1eadp nh\u1eadt Yarn \u0111\u00fang c\u00e1ch gi\u00fap \u0111\u1ea3m b\u1ea3o t\u00ednh \u1ed5n \u0111\u1ecbnh, c\u1ea3i thi\u1ec7n hi\u1ec7u su\u1ea5t c\u0169ng nh\u01b0 b\u1ea3o m\u1eadt cho d\u1ef1 \u00e1n. \u0110\u1ecdc b\u00e0i vi\u1ebft sau \u0111\u1ec3 \u0111\u01b0\u1ee3c gi\u1ea3i [&hellip;]<\/p>\n","protected":false},"author":207,"featured_media":91787,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109],"tags":[],"class_list":["post-91784","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n - ITviec Blog<\/title>\n<meta name=\"description\" content=\"Update yarn th\u01b0\u1eddng xuy\u00ean l\u00e0 b\u01b0\u1edbc c\u1ea7n thi\u1ebft cho vi\u1ec7c qu\u1ea3n l\u00fd v\u00e0 t\u1ed1i \u01b0u d\u1ef1 \u00e1n l\u1eadp tr\u00ecnh, t\u1eadn d\u1ee5ng c\u00e1c phi\u00ean b\u1ea3n m\u1edbi c\u1ee7a th\u01b0 vi\u1ec7n v\u00e0 c\u00f4ng c\u1ee5.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n\" \/>\n<meta property=\"og:description\" content=\"Update yarn l\u00e0 b\u01b0\u1edbc quan tr\u1ecdng gi\u00fap nh\u00e0 ph\u00e1t tri\u1ec3n lu\u00f4n \u0111\u1ed3ng b\u1ed9 v\u1edbi c\u00e1c b\u1ea3n v\u00e1, t\u00ednh n\u0103ng m\u1edbi v\u00e0 c\u1ea3i ti\u1ebfn t\u1eeb Yarn. Vi\u1ec7c c\u1eadp nh\u1eadt Yarn \u0111\u00fang c\u00e1ch gi\u00fap \u0111\u1ea3m\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-28T14:11:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-28T14:11:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/09\/update-yarn-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"421\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Uyen Ngo\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Uyen Ngo\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n - ITviec Blog","description":"Update yarn th\u01b0\u1eddng xuy\u00ean l\u00e0 b\u01b0\u1edbc c\u1ea7n thi\u1ebft cho vi\u1ec7c qu\u1ea3n l\u00fd v\u00e0 t\u1ed1i \u01b0u d\u1ef1 \u00e1n l\u1eadp tr\u00ecnh, t\u1eadn d\u1ee5ng c\u00e1c phi\u00ean b\u1ea3n m\u1edbi c\u1ee7a th\u01b0 vi\u1ec7n v\u00e0 c\u00f4ng c\u1ee5.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/","og_locale":"vi_VN","og_type":"article","og_title":"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n","og_description":"Update yarn l\u00e0 b\u01b0\u1edbc quan tr\u1ecdng gi\u00fap nh\u00e0 ph\u00e1t tri\u1ec3n lu\u00f4n \u0111\u1ed3ng b\u1ed9 v\u1edbi c\u00e1c b\u1ea3n v\u00e1, t\u00ednh n\u0103ng m\u1edbi v\u00e0 c\u1ea3i ti\u1ebfn t\u1eeb Yarn. Vi\u1ec7c c\u1eadp nh\u1eadt Yarn \u0111\u00fang c\u00e1ch gi\u00fap \u0111\u1ea3m","og_url":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2025-09-28T14:11:31+00:00","article_modified_time":"2025-09-28T14:11:34+00:00","og_image":[{"width":800,"height":421,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/09\/update-yarn-scaled.png","type":"image\/png"}],"author":"Uyen Ngo","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Uyen Ngo","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"16 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/"},"author":{"name":"Uyen Ngo","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/f4cd1226846e0258c664e170d3e52d20"},"headline":"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n","datePublished":"2025-09-28T14:11:31+00:00","dateModified":"2025-09-28T14:11:34+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/"},"wordCount":4110,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/09\/update-yarn-scaled.png","articleSection":["Chuy\u00ean m\u00f4n IT"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/","url":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/","name":"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/09\/update-yarn-scaled.png","datePublished":"2025-09-28T14:11:31+00:00","dateModified":"2025-09-28T14:11:34+00:00","description":"Update yarn th\u01b0\u1eddng xuy\u00ean l\u00e0 b\u01b0\u1edbc c\u1ea7n thi\u1ebft cho vi\u1ec7c qu\u1ea3n l\u00fd v\u00e0 t\u1ed1i \u01b0u d\u1ef1 \u00e1n l\u1eadp tr\u00ecnh, t\u1eadn d\u1ee5ng c\u00e1c phi\u00ean b\u1ea3n m\u1edbi c\u1ee7a th\u01b0 vi\u1ec7n v\u00e0 c\u00f4ng c\u1ee5.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/09\/update-yarn-scaled.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/09\/update-yarn-scaled.png","width":800,"height":421,"caption":"update yarn - itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/huong-dan-update-yarn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Update Yarn: Chi ti\u1ebft c\u00e1ch c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n nhanh ch\u00f3ng v\u00e0 an to\u00e0n"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/f4cd1226846e0258c664e170d3e52d20","name":"Uyen Ngo","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/ngo-thieu-my-uyen-author-e1709880420317-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/ngo-thieu-my-uyen-author-e1709880420317-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/ngo-thieu-my-uyen-author-e1709880420317-100x100.jpg","caption":"Uyen Ngo"},"url":"https:\/\/itviec.com\/blog\/author\/uyen-ngo\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/91784","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/207"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=91784"}],"version-history":[{"count":2,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/91784\/revisions"}],"predecessor-version":[{"id":91789,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/91784\/revisions\/91789"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/91787"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=91784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=91784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=91784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}