npm install là một trong những lệnh quan trọng nhất khi làm việc với Node.js và npm, giúp cài đặt các gói phụ thuộc cần thiết cho dự án. Với cú pháp đơn giản nhưng linh hoạt, npm install cho phép lập trình viên tải về các package từ registry, cập nhật dependencies, cài đặt theo từng môi trường hoặc lưu cấu hình vào package.json.
Đọc bài viết sau để được giải đáp chi tiết hơn về:
- Câu lệnh npm install, bao gồm cú pháp, ví dụ, cách sử dụng cũng như lý giải tại sao câu lệnh này quan trọng.
- Một số ví dụ cơ bản của câu lệnh npm install.
- Hướng dẫn cách cài đặt npm và npm package.
- Hướng dẫn cách kiểm tra và cập nhật các phiên bản của npm.
- Package Management với package.json.
Đọc chi tiết: NPM là gì: Khái niệm, lệnh và thao tác cơ bản với NPM
Lệnh npm install dùng để làm gì?
npm install là câu lệnh sẽ cài đặt các package và toàn bộ dependencies mà chúng phụ thuộc vào. Nếu bạn không chỉ định tên package, npm sẽ tự động cài đặt tất cả dependencies được liệt kê trong tệp package.json của dự án.
Nếu một gói có package-lock, hoặc tệp npm shrinkwrap thì việc cài đặt các dependencies sẽ dựa trên các tệp đó, theo thứ tự ưu tiên sau:
npm-shrinkwrap.json
package-lock.json
Lệnh này có thể được dùng để:
- Cài đặt tất cả các dependencies của dự án được định nghĩa trong package.json.
- Cài đặt các gói cụ thể nếu được chỉ định.
- Cập nhật dependencies hoặc đảm bảo môi trường cài đặt khớp với cấu hình của dự án.
Hiểu cách npm install hoạt động và các tùy chọn mà nó hỗ trợ là điều rất quan trọng để quản lý dự án hiệu quả.
Cú pháp cơ bản của npm install
npm install [<tên-package>] [--save-dev] [--global]
Trong đó
<package-name>: Tên của gói (package) mà bạn muốn cài đặt.--save-dev: Cài đặt gói dưới dạng development dependency (phục vụ cho môi trường phát triển, không cần khi chạy dự án ở production).--global(hoặc-g): Cài đặt gói ở toàn cục, để có thể dùng trong bất kỳ dự án nào trên máy.
Sự khác biệt giữa cài đặt cục bộ (local) và toàn cục (global) là gì?
Trong npm có hai kiểu cài đặt gói: cục bộ (local) và toàn cục (global).
- Cài đặt cục bộ là thiết lập mặc định, khi chạy npm install, npm sẽ cài gói vào thư mục node_modules trong dự án hiện tại. Các gói này chỉ khả dụng cho dự án đó, không thể dùng cho dự án khác.
npm install lodash
Lệnh trên sẽ cài lodash vào thư mục node_modules của dự án và thêm nó vào file package.json trong phần dependencies.
- Cài đặt toàn cục thường dùng cho những gói cần được truy cập từ bất kỳ đâu trong hệ thống, ví dụ như các công cụ chạy trên dòng lệnh (CLI tools). Khi cài gói toàn cục, nó sẽ được dùng chung cho mọi dự án trên máy.
npm install -g nodemon
Sau khi cài, nodemon sẽ có sẵn trên toàn hệ thống, và bạn có thể dùng nó trong bất kỳ dự án nào.
Tuy nhiên, nếu bạn chạy npm install <package-name> khi chưa có tệp package.json (nghĩa là chưa chạy npm init), npm vẫn sẽ cài đặt gói vào thư mục node_modules cục bộ như thường. Điều khác biệt là npm sẽ không ghi lại thông tin gói này vào bất kỳ danh sách phụ thuộc (dependencies) nào, vì tệp package.json chưa được tạo. Điều này có thể khiến việc tái tạo môi trường dự án sau này trở nên khó khăn hơn.
Lệnh npm install hỗ trợ những tùy chọn nào?
Lệnh npm install hỗ trợ nhiều tùy chọn hữu ích để mở rộng chức năng, bao gồm:
--save: Thêm package đã cài đặt vào mục dependencies trong package.json. Tuy nhiên, từ npm5, lệnh save đã trở thành hành vi mặc định, không cần dùng flag này nữa.--save-dev: Thêm package đã cài đặt vào mục devDependencies, chỉ dùng trong quá trình phát triển.-ghoặc--global: Cài đặt package ở phạm vi toàn hệ thống, giúp sử dụng được ở mọi nơi.--no-save: Ngăn không cho thêm package đã cài đặt vào package.json.--legacy-peer-deps: Bỏ qua cảnh báo về peer dependencies và vẫn cài đặt package.
Để hiểu rõ hơn về cách hoạt động của npm install, bạn có thể tham khảo 2 ví dụ sau
Ví dụ 1: Cài đặt tất cả dependencies của dự án
Nếu bạn clone một dự án đã có sẵn file package.json, bạn có thể cài đặt toàn bộ dependencies cần thiết chỉ với lệnh:
npm install
npm install trong trường hợp này giúp bạn tái tạo lại môi trường phát triển của dự án chỉ với một dòng lệnh.
- npm sẽ đọc file package.json.
- Tự động tải và cài đặt tất cả dependencies được liệt kê.
- Đặt chúng vào thư mục node_modules trong dự án.
Ví dụ 2: Cài đặt một gói cụ thể
Để cài đặt một gói cụ thể, ví dụ như lodash, và thêm nó vào danh sách dependencies trong tệp package.json, bạn có thể dùng lệnh sau:
npm install lodash
Lệnh này sẽ tải và cài đặt gói lodash từ npm registry về dự án. Việc thêm vào dependencies có nghĩa là lodash được coi là gói cần thiết cho dự án khi chạy (runtime). Nếu bạn chia sẻ dự án này cho người khác, chỉ cần họ chạy npm install thì lodash sẽ được tự động tải về.
Có những cách cài đặt npm và npm package nào?
Cài đặt module qua npm install
npm install <module>
Trong lệnh trên, bạn sẽ thay <module> bằng tên của module mà bạn muốn cài đặt. Ví dụ, nếu bạn muốn cài đặt Express (framework web của Node.js nổi tiếng và được sử dụng nhiều nhất), bạn có thể chạy lệnh sau
npm install express
Lệnh trên sẽ cài đặt module express vào thư mục /node_modules trong thư mục hiện tại. Mỗi khi bạn cài đặt một module từ npm, nó sẽ được lưu vào thư mục node_modules.
Ngoài việc cài đặt một module riêng lẻ, bạn cũng có thể cài đặt tất cả các module được liệt kê trong dependencies và devDependencies của file package.json trong thư mục hiện tại. Để làm điều đó, bạn chỉ cần chạy lệnh này
npm install
Khi bạn chạy lệnh này, npm sẽ bắt đầu quá trình cài đặt tất cả các dependencies của dự án hiện tại. Ngoài ra, có một điều bạn nên lưu ý: lệnh npm install có một dạng viết tắt thường xuất hiện khi làm việc với các module trong hệ sinh thái npm.
npm i
Ở đây, chữ i thay thế cho install.
Cài đặt module và lưu chúng vào package.json như một dependency
Tương tự như với npm init, lệnh npm install cũng có một (hoặc vài) flag mà bạn sẽ thấy hữu ích trong quá trình làm việc giúp tiết kiệm thời gian và công sức khi thao tác với file package.json của dự án.
Khi bạn chạy lệnh npm install để cài đặt một module, bạn có thể thêm flag tùy chọn –save vào lệnh. Flag này sẽ thêm module đó như một dependency của dự án và ghi nó vào mục dependencies trong file package.json.
npm install <module> --save # Trong đó <module> là tên của module mà bạn muốn cài đặt
Cài đặt module và lưu chúng vào package.json như một Developer Dependency
Có một flag gần như giống hệt về mặt chức năng so với --save khi cài đặt một module, đó là: --save-dev
Tuy nhiên, có một vài điểm khác biệt quan trọng: thay vì lưu module được cài đặt vào mục dependencies trong package.json, thì –save-dev sẽ lưu nó vào mục devDependencies.
- dependencies: dành cho môi trường production – tức là những module cần thiết để dự án hoạt động khi đưa vào chạy thực tế.
- devDependencies: là tập hợp các module chỉ phục vụ trong quá trình phát triển ứng dụng, tức là bạn cần chúng để xây dựng dự án, nhưng khi ứng dụng chạy thực tế thì không cần đến.
Các module trong devDependencies thường bao gồm những công cụ như: công cụ kiểm thử (testing tools), server cục bộ để hỗ trợ phát triển nhanh hơn, và nhiều tiện ích khác.
Cài đặt module toàn cục (globally) trên hệ thống
Flag cuối cùng, cũng là flag thường gặp nhất của lệnh npm install mà bạn nên biết, đó là flag dùng để cài đặt một module toàn cục trên hệ thống.
Các module được cài đặt toàn cục có thể cực kỳ hữu ích. Chúng có rất nhiều công cụ, tiện ích và nhiều thứ khác dành cho cả phát triển lẫn sử dụng chung mà bạn có thể cài đặt để dùng toàn hệ thống.
Để cài đặt một module từ npm theo cách toàn cục, bạn chỉ cần thêm flag –global (hoặc viết tắt là -g) khi chạy lệnh cài đặt. Khi đó, module sẽ được cài đặt ở phạm vi toàn hệ thống thay vì chỉ cài đặt cục bộ (local) trong thư mục hiện tại.
Cài đặt packages qua –omit=dev
Lệnh npm install --omit=dev chỉ thị cho npm cài đặt các gói được liệt kê trong các mục dependencies và optionalDependencies của tệp package.json của bạn, nhưng không cài đặt các gói được liệt kê trong mục devDependencies.
Lệnh này thường được sử dụng trong các môi trường sản xuất (production) hoặc khi triển khai một ứng dụng. Điều này là do devDependencies thường là các công cụ chỉ dùng trong quá trình phát triển (như các framework kiểm thử, công cụ linter, hoặc công cụ xây dựng) và không cần thiết để ứng dụng chạy được trong môi trường sản xuất.
npm install --omit=dev
Lệnh này sẽ hướng dẫn npm bỏ qua việc cài đặt tất cả các gói đã được liệt kê trong mục devDependencies của tệp package.json. Điều này rất hữu ích và là một phương pháp tiêu chuẩn để đảm bảo môi trường sản xuất của bạn được gọn nhẹ, an toàn và tối ưu nhất.
File package.json đóng vai trò gì trong npm?
File package.json đóng vai trò quan trọng trong việc quản lý dependencies của dự án Node.js. Nó chứa thông tin về dự án, các dependencies và những metadata khác.
Cài đặt tất cả dependencies
Nếu dự án của bạn có file package.json liệt kê sẵn dependencies, chỉ cần chạy lệnh sau để cài đặt toàn bộ.
npm install
Npm sẽ tự động cài đặt tất cả dependencies và đặt chúng trong thư mục node_modules.
Thêm một dependency mới
Để thêm một dependency mới và lưu nó vào package.json, bạn có thể chạy câu lệnh sau:
npm install express
Lệnh này sẽ cài đặt gói express và tự động thêm nó vào mục dependencies trong package.json.
Thêm dependencies cho môi trường phát triển
Development dependencies là những gói chỉ cần thiết trong quá trình phát triển, chẳng hạn như framework kiểm thử hoặc công cụ build. Ta có thể cài đặt bằng cờ –save-dev
npm install jest --save-dev
Lệnh này sẽ thêm jest vào mục devDependencies trong package.json.
Các câu hỏi thường gặp về npm install
Làm thế nào để cài đặt và gỡ bỏ một package bằng npm?
Để cài đặt một package, bạn có thể sử dụng lệnh npm install kèm theo tên package. Chẳng hạn như câu lệnh npm install package-name.
Bên cạnh đó, bạn cũng có thể gỡ bỏ một package bằng lệnh npm uninstall kèm theo tên package. Ví dụ: npm uninstall package-name.
Có thể sử dụng npm cho phát triển web front-end với JavaScript và HTML không?
Có. Mặc dù npm thường gắn liền với Node.js ở back-end, nhưng nó cũng rất hữu ích cho front-end development. Với npm, bạn có thể:
- Cài đặt thư viện JavaScript (ví dụ React, Vue, jQuery).
- Quản lý các công cụ build như Webpack, Babel.
- Dùng script tự động hóa (minify, bundle, linting).
Làm thế nào để cập nhật tất cả dependencies trong dự án bằng npm?
Để cập nhật tất cả dependencies trong dự án của bạn, bạn có thể chạy lệnh npm update. Lệnh này sẽ cập nhật các dependencies lên phiên bản mới nhất tương thích, dựa trên cấu hình được chỉ định trong file package.json.
npm với các lệnh npm ci như thế nào?
- npm install: Dùng trong giai đoạn phát triển để cài đặt và cập nhật dependencies, đồng thời cho phép thêm từng thư viện riêng lẻ. Lệnh này linh hoạt nhưng có thể làm thay đổi package-lock.json.
- npm ci: Dùng trong môi trường CI/CD để cài đặt sạch và chính xác theo package-lock.json. Lệnh này đảm bảo build ổn định, nhất quán và nhanh hơn so với npm install.
Hãy cùng xem chi tiết những điểm khác biệt chính giữa hai lệnh này qua bảng dưới đây.
| npm install | npm ci | |
| Mục đích sử dụng | Phát triển tương tác | Tích hợp liên tục (CI) và cài đặt sạch |
| Yêu cầu package-lock.json | Không | Có |
| Xử lý khi không khớp | Cập nhật package-lock.json nếu cần | Báo lỗi nếu package.json và package-lock.json không khớp |
| Cài đặt một phần | Cho phép thêm từng dependency riêng lẻ | Chỉ cài đặt toàn bộ dự án |
| Xử lý thư mục node_modules | Giữ lại thư mục hiện có | Xóa và tạo lại node_modules |
| Thay đổi file lock | Có thể chỉnh sửa package-lock.json | Không bao giờ chỉnh sửa package-lock.json |
| Kiểm tra dependencies | Kiểm tra và cập nhật nếu cần thiết | Bỏ qua bước kiểm tra dependencies |
Những khác biệt quan trọng này làm nổi bật sự khác nhau cốt lõi giữa hai lệnh.
- Nên dùng npm install trong quá trình phát triển, khi cần thử nghiệm và điều chỉnh dự án.
- Khi đã hoàn thiện và muốn build trong môi trường CI/CD, hãy dùng npm ci để đảm bảo kết quả build ổn định và có thể lặp lại cho các bản phát hành sản phẩm.
Tổng kết
npm install không chỉ đơn thuần là lệnh cài đặt package mà còn là công cụ giúp quản lý và tối ưu toàn bộ hệ thống phụ thuộc trong dự án Node.js. Khi hiểu rõ các tùy chọn, cách vận hành và mẹo sử dụng, bạn sẽ tiết kiệm thời gian, hạn chế lỗi và nâng cao hiệu suất làm việc.

