Khi làm việc với Node.js, bạn sẽ liên tục gặp hai lệnh npm và npx. Chúng đi cùng nhau (cài Node.js là có cả hai), nhưng vai trò hoàn toàn khác nhau. Bài viết này giúp bạn phân biệt rõ và biết lúc nào nên dùng cái nào.
1. npm là gì?
npm (Node Package Manager) là trình quản lý gói của Node.js. Nó làm ba việc chính:
- Cài đặt thư viện/công cụ từ registry (npmjs.com) về máy hoặc về dự án.
- Quản lý phụ thuộc thông qua file
package.jsonvàpackage-lock.json. - Chạy script được định nghĩa trong
package.json.
Ví dụ với npm
# Khởi tạo dự án mới
npm init -y
# Cài thư viện vào dự án (ghi vào dependencies)
npm install express
# Cài thư viện chỉ dùng khi phát triển (devDependencies)
npm install --save-dev eslint
# Cài toàn cục (dùng được ở mọi nơi trong máy)
npm install -g typescript
# Gỡ cài đặt
npm uninstall express
# Chạy script trong package.json
npm run build
npm test
Ví dụ package.json:
{
"name": "demo-app",
"scripts": {
"start": "node index.js",
"lint": "eslint ."
},
"devDependencies": {
"eslint": "^9.0.0"
}
}
Sau khi cài, chạy npm run lint sẽ gọi ESLint đã cài trong node_modules.
2. npx là gì?
npx (Node Package eXecute) là công cụ để thực thi các gói npm, mà không cần cài đặt toàn cục trước.
Khi bạn gõ npx <tên-gói>, npx sẽ:
- Tìm gói đó trong
node_modules/.bincủa dự án hiện tại. - Nếu không có, kiểm tra xem nó có trong PATH không.
- Nếu vẫn không có, tải tạm gói về từ registry, chạy xong thì bỏ (cache tạm).
Ví dụ với npx
# Tạo dự án React mà không cần cài create-react-app toàn cục
npx create-react-app my-app
# Tạo dự án Vite
npx create-vite@latest my-vite-app
# Chạy ESLint đã cài trong dự án
npx eslint src/
# Chạy một gói cụ thể với phiên bản chỉ định
npx [email protected] --version
# Khởi tạo cấu hình Tailwind
npx tailwindcss init
# Chạy một server tĩnh nhanh để xem thử thư mục hiện tại
npx serve .
3. Bảng so sánh nhanh
| Tiêu chí | npm | npx |
|---|---|---|
| Vai trò | Quản lý gói (cài, gỡ, cập nhật) | Thực thi gói |
| Cài đặt gói | Có | Không bắt buộc (tải tạm khi cần) |
Thay đổi package.json |
Có | Không |
| Dùng cho | Quản lý phụ thuộc, chạy script | Chạy công cụ CLI, scaffold dự án |
| Dung lượng để lại trên máy | Gói nằm trong node_modules hoặc global |
Gần như không để lại gì |
| Phiên bản | Theo bản đã cài | Có thể chọn bất kỳ bản nào, ví dụ [email protected] |
4. Một ví dụ thực tế: so sánh cùng một việc
Giả sử bạn muốn tạo dự án React bằng Vite.
Cách dùng npm (cài trước, chạy sau):
npm install -g create-vite
create-vite my-app
Cách này để lại create-vite trên máy, và sau vài tháng nó có thể đã lỗi thời.
Cách dùng npx (chạy luôn):
npx create-vite@latest my-app
Luôn dùng bản mới nhất, không rác máy. Đây là lý do npx rất phổ biến cho các lệnh khởi tạo dự án.
5. Khi nào dùng cái nào?
Dùng npm khi:
- Thêm thư viện mà code của bạn
import/require(express, lodash, react…). - Quản lý phụ thuộc của dự án và chia sẻ qua
package.json. - Chạy các script như
npm run dev,npm test.
Dùng npx khi:
- Chạy công cụ chỉ dùng một lần (scaffold, generator, migration…).
- Muốn thử một CLI mà không muốn cài.
- Cần chạy một phiên bản cụ thể của công cụ.
- Chạy binary của gói đã cài cục bộ trong dự án (
npx jest,npx prettier --write .).
6. Lưu ý thêm
- Từ npm 7 trở đi,
npxđược viết lại và chạy trên nềnnpm exec. Hai lệnh sau gần như tương đương:npx eslint .vànpm exec eslint .. - Khi npx cần tải gói chưa có, nó sẽ hỏi xác nhận (
Need to install the following packages... Ok to proceed?). Thêm cờ--yeshoặc-yđể bỏ qua bước này, hữu ích trong CI/CD. - Đừng chạy
npxvới gói lạ không rõ nguồn gốc, vì nó sẽ thực thi mã ngay trên máy bạn. - Ngoài ra còn có pnpm (
pnpm dlx) và Yarn (yarn dlx) với chức năng tương tự npx.
7. Kết luận
Có thể nhớ ngắn gọn như sau:
- npm = cài và quản lý gói.
- npx = chạy gói, cài hay chưa cũng được.
Nắm vững hai công cụ này, bạn sẽ giữ được máy gọn gàng hơn, dự án nhất quán hơn và tiết kiệm nhiều thời gian khi làm việc với hệ sinh thái JavaScript.







Bình luận 0
Chia sẻ ý kiến hoặc đặt câu hỏi cùng cộng đồng