NPM update package: Hướng dẫn cập nhật gói trong NodeJS

npm update package là thao tác cơ bản nhưng vô cùng quan trọng trong quá trình phát triển dự án Node.js. Việc cập nhật các package không chỉ giúp bạn tận dụng các tính năng mới mà còn vá lỗi và cải thiện hiệu năng ứng dụng.

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

  • Tổng quan về npm update package, tầm quan trọng cũng như thách thức của câu lệnh này. 
  • Tổng hợp 4 cách hoạt động của lệnh update trong npm.
  • Cách sử dụng câu lệnh npm outdated và npm-check-updates để kiểm tra các package. 
  • Một số câu hỏi thường gặp về npm update. 

Đọc chi tiết: NPM là gì: Khái niệm, lệnh và thao tác cơ bản với NPM

Tổng quan về npm update package 

Lệnh npm update được sử dụng để cập nhật các dependencies đã cài đặt trong dự án Node.js. Lệnh này sẽ nâng cấp các gói lên phiên bản mới nhất dựa trên giới hạn phiên bản (version constraints) được định nghĩa trong file package.json.

Việc cập nhật dependencies đóng vai trò quan trọng trong việc vá các lỗ hổng bảo mật, sửa lỗi, cải thiện hiệu năng và đảm bảo khả năng tương thích của ứng dụng. Tuy nhiên, nếu cập nhật một cách tùy tiện tất cả các gói mà không kiểm soát, bạn có thể gặp phải nhiều lỗi không mong muốn. 

Vì vậy, việc nắm vững cách cập nhật từng package đúng cách là điều cần thiết. Các bản cập nhật mới thường mang đến những tính năng và cải tiến giúp nâng cao trải nghiệm phát triển cho lập trình viên.

Tầm quan trọng của việc cập nhật package npm 

Cập nhật gói npm là cách giúp ứng dụng của bạn hoạt động mượt mà và an toàn hơn. Dưới đây là một số ví dụ thực tế cho thấy lý do tại sao việc cập nhật package lại quan trọng. 

  • Vấn đề tương thích: Một số package có thể ngừng hoạt động khi bạn nâng cấp lên phiên bản Node.js mới hơn hoặc khi các dependencies khác thay đổi. Việc thường xuyên cập nhật giúp đảm bảo dự án luôn tương thích với môi trường hệ thống mới nhất của Node.js.
  • Cải thiện hiệu năng: Các nhà phát triển liên tục tối ưu hóa package để nâng cao tốc độ, giảm rò rỉ bộ nhớ và tối ưu hiệu suất. Cập nhật lên phiên bản mới nhất (trong phạm vi cho phép) có thể giúp ứng dụng chạy nhanh hơn và ổn định hơn.
  • Sửa lỗi: Nếu một package đang gặp lỗi ảnh hưởng đến ứng dụng của bạn, việc cập nhật lên phiên bản mới thường sẽ khắc phục sự cố này.
  • Bảo mật: Nhiều package sẽ chứa lỗ hỏng bảo mật nghiêm trọng như RCE, prototype pollution hay XSS. Việc cập nhật package kịp thời, đặc biệt qua các bản vá patch là biện pháp phòng thủ đầu tiên để bảo vệ ứng dụng khỏi các cuộc tấn công.
  • Tính năng mới: Các bản cập nhật trong phạm vi cho phép thường bao gồm sửa lỗi, cải thiện hiệu năng và đôi khi là tính năng nhỏ, giúp duy trì ứng dụng ổn định và an toàn.

Một số thách thức khi update package 

Dưới đây là một số hạn chế khi sử dụng npm để cập nhật package bạn cần lưu ý

  • Thay đổi chức năng: Việc cập nhật package có thể làm thay đổi hoặc loại bỏ một số chức năng, khiến dự án gặp lỗi. Do đó, trước khi cập nhật, hãy kiểm tra changelog của package để xem các thay đổi và thử nghiệm trên một nhánh riêng (branch) trước khi áp dụng vào dự án chính.
  • Xung đột giữa các dependencies: Để khắc phục, bạn có thể sử dụng lệnh npm ls để kiểm tra cây dependencies và giữ file package-lock.json được cập nhật để đảm bảo tính tương thích. Đồng thời, tránh chỉnh sửa thủ công node_modules hoặc package-lock.json, dùng npm install để cập nhật có kiểm soát.
  • Phiên bản mới không ổn định: Tránh cài đặt mù quáng các phiên bản gắn thẻ @latest. Hãy xem phản hồi của cộng đồng và kiểm thử trên môi trường phát triển (development environment) trước khi triển khai chính thức.

Cách hoạt động của lệnh npm update package 

Lệnh npm update package không chỉ đơn giản là nâng cấp phiên bản các gói trong dự án Node.js, mà còn tuân theo một cơ chế kiểm tra và cập nhật có quy tắc rõ ràng dựa trên thông tin trong file package.json và package-lock.json. 

Ở phần dưới đây, ITviec sẽ giải đáp chi tiết từng bước mà npm thực hiện khi bạn chạy lệnh này.

Cập nhật single package

Lệnh này được sử dụng để cập nhật một package cụ thể trong dự án hoặc trên hệ thống. Bạn chỉ cần chạy lệnh npm update kèm theo tên package cần cập nhật. Cách này sẽ phù hợp khi bạn chỉ muốn cập nhật một gói cần thiết, tránh ảnh hưởng đến các dependencies khác.

npm update <package-name>

Khi thực hiện, npm sẽ chỉ cập nhật package được chỉ định, dựa trên phạm vi phiên bản (version range) đã được định nghĩa trong package.json.

Việc chỉ cập nhật những package cần thiết giúp bạn hạn chế các lỗi phát sinh do các dependencies khác được nâng cấp cùng lúc, đảm bảo dự án hoạt động ổn định và dễ kiểm soát hơn.

Cập nhật tất cả các package trong npm

Theo mặc định, lệnh npm update sẽ cập nhật các package trong dependencies và devDependencies, lên phiên bản mới nhất dựa trên tag (như ^ hoặc ~) đã được định nghĩa. Nó không cập nhật optionalDependencie, peerDependencies hay packages cài qua git URL, file local.

Các package này được cài đặt cục bộ trong thư mục dự án, cụ thể là nằm trong thư mục node_modules.

npm update

Cùng với các bí danh (aliases) như up, upgrade hay update. Khi chạy lệnh này, npm sẽ tự động tìm và cập nhật các gói phù hợp trong phạm vi cho phép, giúp bạn đảm bảo dự án luôn ở trạng thái cập nhật ổn định.

Ngoài ra, nếu bạn muốn cập nhật tất cả các package được cài đặt toàn cục (global) lên phiên bản mới nhất, chỉ cần thêm tùy chọn -g:

npm update -g

Các package được cài đặt toàn cục tồn tại ở cấp độ hệ thống, không chỉ riêng cho một dự án cụ thể. Vị trí của các package này phụ thuộc vào hệ điều hành hoặc cấu hình hệ thống của bạn.

Để xem danh sách tất cả các package được cài đặt toàn cục cùng vị trí lưu trữ của chúng, bạn có thể sử dụng lệnh sau:

npm list -g --depth 0

Lệnh này sẽ hiển thị toàn bộ danh sách package global đang được cài đặt, giúp bạn dễ dàng quản lý và kiểm tra phiên bản của từng gói trong môi trường toàn hệ thống.

Cập nhật global package

Lệnh npm update -g được sử dụng để cập nhật tất cả các package đã được cài đặt toàn cục (global) và đang có phiên bản lỗi thời/ Nghĩa là phiên bản hiện tại khác với phiên bản “mong muốn” (wanted).

npm update -g

Khi chạy lệnh này, npm sẽ kiểm tra toàn bộ danh sách các gói toàn cục và tiến hành cập nhật từng package lên phiên bản mới nhất phù hợp theo quy tắc semantic versioning (semver).

Ngoài ra, nếu một package đang ở phiên bản mới hơn latest (ví dụ bản beta), npm update sẽ bỏ qua và giữ nguyên gói đó, thay vì tự động hạ cấp xuống phiên bản latest.

Cập nhật một phiên bản cụ thể (specific version)

npm cung cấp nhiều cách khác nhau để cập nhật một package cụ thể trong dự án. Để cập nhật một package cụ thể, bạn có thể áp dụng các cách như sau 

Cập nhật một package cụ thể lên phiên bản mới nhất (theo tag trong package.json)

Phương pháp này sẽ cập nhật package lên phiên bản mới nhất có sẵn, nhưng vẫn tuân theo giới hạn phiên bản (version constraint) được định nghĩa trong package.json.

npm update <package-name>

Ví dụ như bạn đang cài đặt Cypress@12.17.4, trong khi phiên bản mới nhất là 14.0.1. Tuy nhiên, trong file package.json, bạn giới hạn phiên bản là 13.17.*. Khi chạy lệnh:

npm update cypress

Lúc này npm sẽ chỉ cập nhật Cypress lên bản mới nhất trong phạm vi 13.17, chứ không vượt quá giới hạn đã đặt.

Cập nhật package lên một phiên bản cụ thể

Trong trường hợp bạn muốn cài một phiên bản chính xác để đảm bảo tính tương thích với các package khác, lệnh npm update sẽ không hoạt động. Thay vào đó, bạn cần sử dụng lệnh

npm install <package-name>@<version>

Cách này giúp đảm bảo rằng phiên bản mong muốn được cài đặt chính xác, phục vụ mục đích kiểm thử hoặc duy trì tính ổn định cho dự án.

Cập nhật package lên phiên bản ổn định (stable) mới nhất

Mặc dù npm update có thể giúp cập nhật package, nhưng nó vẫn bị giới hạn bởi version constraint trong package.json. Nếu bạn muốn bỏ qua giới hạn và cài đặt phiên bản ổn định mới nhất, hãy dùng lệnh:

npm install <package-name>@latest

Lệnh này sẽ buộc npm cài đặt phiên bản stable mới nhất của package, ngay cả khi điều đó có thể gây xung đột hoặc thay đổi lớn so với phiên bản hiện tại.

Cách sử dụng npm outdated để kiểm tra các package lỗi thời

Trước khi tiến hành cập nhật, bạn nên kiểm tra xem những package nào trong dự án đã lỗi thời. Hãy chạy lệnh sau để xem danh sách các gói có thể được cập nhật.

npm outdated

Khi chạy lệnh này, bạn sẽ nhận được một bảng liệt kê chi tiết các package có bản cập nhật mới. 

  • Current: Phiên bản hiện tại đang được cài đặt trong dự án.
  • Wanted: Phiên bản mới nhất tương thích theo phạm vi phiên bản được định nghĩa trong package.json.
  • Latest: Phiên bản mới nhất tuyệt đối đang có sẵn trên npm registry.

Việc kiểm tra định kỳ bằng npm outdated giúp bạn theo dõi nhanh các gói cần nâng cấp, đảm bảo dự án luôn cập nhật, bảo mật và tương thích tốt với môi trường mới nhất.

Cách sử dụng npm-check-updates

Để kiểm soát việc nâng cấp chủ động và tùy chỉnh hơn, bạn có thể sử dụng lệnh npm-check-updates. Cú pháp:

npm install -g npm-check-updates

Điểm khác biệt quan trọng:

  • npm update cập nhật node_modules + package-lock.json mà không thay đổi package.json.
  • npm-check-updates chỉ sửa package.json, không chạm vào node_modules.

Sau đó, chạy lệnh sau để hiển thị danh sách các gói cần nâng cấp. Tương tự như npm outdated, lệnh này chỉ kiểm tra mà không áp dụng thay đổi:

ncu

Kết quả ví dụ như sau:

Checking package.json

[====================] 12/12 100%

 @testing-library/user-event    ^13.5.0  →  ^14.2.1

 @types/jest                    ^27.5.2  →  ^28.1.4

 @types/node                  ^16.11.42  →  ^18.0.1

Lưu ý là npm-check-updates không thay thế npm outdated, chúng phục vụ mục đích khác nhau:

  • npm outdated: Trong phạm vi ràng buộc (dành cho cập nhật an toàn).
  • npm-check-updates: Bỏ qua ràng buộc, xem phiên bản mới nhất tuyệt đối (dành cho nâng cấp chủ động).

Nâng cấp dependencies trong package.json

Để nâng cấp các gói, chỉ cần chạy 1 trong 2 lệnh sau

ncu --upgrade
ncu -u

Gói npm-check-updates sẽ cập nhật phiên bản mới nhất của các dependencies trong file package.json, kể cả khi đó là phiên bản có thay đổi phá vỡ (breaking change). Lưu ý rằng lệnh này chỉ chỉnh sửa package.json, không tự động cài đặt lại gói.

Sau khi nâng cấp xong, bạn cần chạy thêm lệnh install để cập nhật lại thư mục node_modules và file package-lock.json.

npm install

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

Làm thế nào để cập nhật tất cả các gói npm cùng một lúc?

Để cập nhật tất cả các package trong dự án Node.js, bạn chỉ cần sử dụng lệnh

npm update

Lệnh này sẽ quét file package.json, kiểm tra các gói có phiên bản mới hơn trong phạm vi quy định (theo ký hiệu như ^ hoặc ~), sau đó tự động cập nhật chúng trong node_modules.

Làm sao để kiểm tra những package nào đã lỗi thời (outdated)?

Bạn có thể dùng lệnh npm outdated để kiểm tra những package nào đã bị lỗi thời trong npm. Lệnh này sẽ hiển thị danh sách chi tiết gồm tên package, phiên bản hiện tại, phiên bản mong muốn (theo package.json) và phiên bản mới nhất có sẵn trên registry npm.

Bảng kết quả sẽ giúp bạn dễ dàng xác định gói nào cần cập nhật, từ đó quyết định nên update từng phần hay toàn bộ.

Những ứng dụng khi cập nhật gói bằng npm là gì?

Cập nhật các gói npm là việc cần thiết, nhưng nếu thực hiện sai cách có thể khiến dự án của bạn gặp lỗi nghiêm trọng. Hãy tuân theo những tips dưới đây để quy trình cập nhật diễn ra suôn sẻ và an toàn.

  • Kiểm tra các gói lỗi thời thường xuyên: Sử dụng lệnh npm outdated hoặc công cụ ncu để phát hiện các dependencies đã lỗi thời. Việc kiểm tra định kỳ giúp bạn kịp thời cập nhật các bản vá bảo mật và sửa lỗi.
  • Sử dụng giới hạn phiên bản trong package.json: Tuân thủ quy tắc semantic versioning (ví dụ: ^1.2.3, ~1.2.3) để tránh những thay đổi lớn gây hỏng dự án, đồng thời vẫn cho phép cập nhật an toàn trong phạm vi tương thích.
  • Kiểm thử bản cập nhật trên môi trường thật: Luôn thử nghiệm các bản cập nhật package trên môi trường staging hoặc sử dụng công cụ như BrowserStack để phát hiện sớm các vấn đề tương thích trước khi triển khai chính thức.
  • Sao lưu file package-lock.json trước khi cập nhật: Trước khi update, hãy tạo bản sao lưu package-lock.json. Khi cần, bạn có thể khôi phục lại file này để đảm bảo môi trường phát triển quay về trạng thái ổn định ban đầu.
  • Chỉ cập nhật khi cần thiết: Ưu tiên các bản cập nhật có liên quan đến vá lỗi bảo mật hoặc sửa lỗi quan trọng. Tránh cập nhật không cần thiết vì có thể làm phát sinh lỗi mới và ảnh hưởng đến hoạt động của dự án.

Tổng kết

npm update package không chỉ đơn thuần là lệnh cập nhật, mà còn là công cụ giúp bạn duy trì sự ổn định, bảo mật và hiệu năng tối ưu cho dự án Node.js. Khi nắm vững cách sử dụng, bạn có thể dễ dàng quản lý các phiên bản gói, phát hiện lỗi kịp thời và đảm bảo môi trường phát triển luôn được cập nhật phiên bản mới nhất.

TÁC GIẢ
Tuong Uyen
Tuong Uyen

Senior Content Writer

Có hơn 3 năm kinh nghiệm chuyên thực hiện các phỏng vấn chuyên sâu về kiến thức công nghệ thông tin với nhiều chuyên gia IT thuộc nhiều lĩnh vực IT hấp dẫn như Software Development, Game, Blockchain, Data, RPA,… Với niềm yêu thích và nghiên cứu về những kiến thức nền tảng mà mọi người kỹ sư công nghệ thông tin nào cũng cần phải nắm vững, như C++, Framework Front-End, Web, Mobile, Database,…, Uyên mang đến đa dạng những bài viết kiến thức IT cho mọi người đọc từ cơ bản đến nâng cao.