npm và npx - Sự khác nhau là gì?

Nếu bạn đã từng có thắc mắc, npm với npx khác nhau như thế nào, hay chúng là gì? Thì hôm nay bài post này dành cho bạn. Học Nodejs thì chắc hẳn bạn sẽ biết npm rồi ha, còn npx thì mới hơn chút. Mình cũng đã từng có thắc mắc khi thấy npx, mình tưởng họ gõ nhầm cơ đấy, nhưng thật ra không phải. Chính vì thế hôm nay mình sẽ giải thích npm và npx là gì và chúng khác nhau như thế nào nhé.

NPM - Node package manager

NPM là trình quản lý thư viện cho Nodejs với mục đích chính là tự động hóa việc quản lý các thư viện phụ thuộc. Ví dụ, bạn làm web bạn cần jquery, cần bootstrap, thay vì lên mạng kiếm tải về hoặc copy link dán vào thì đã có npm, gõ vài dòng lệnh nó sẽ tải về lưu vào project của bạn, bạn chỉ việc gọi và xài thôi. Những thư viện bạn cần xài chính là các “phụ thuộc” - dependencies hay còn gọi là packages.

Tất cả dependencies bạn cần sẽ được lưu trong file package.json, và để tải tất cả dependencies về chỉ việc bấm npm install là xong. Dĩ nhiên nó cũng quản lý version hiện tại của thư viện bạn cần, việc này giúp project của bạn khi làm team với nhau không bị break vì xung đột.

NPX - Node package executor

“Node package executor” Tên này mình đặt đấy :))) Trang chủ ghi là > execute npm package binaries.

Npx là công cụ để thực thi các Node package, nó đi đôi với npm kể từ phiên bản 5 chấm mấy đó, 5.2 thì phải.

Cách Npx hoạt động như sau, nếu bạn gõ npx tên-thư-viện-nào-đó:

  1. Đầu tiên nó sẽ tìm trong node_modules xem có thư viện này hay chưa, và có đường dẫn hợp lệ để chạy hay không. Để node hiểu đây là một thư viện có thể execute được bởi npx, thì nó phải có file nằm trong thư mục node_modules/.bin. Để file nằm được trong này thì chính thư viện đó cần config trong package.json. (Thực ra Npx sẽ ưu tiên tìm trong $PATH trước, nghĩa là tìm trong biến môi trường của hệ hành, nhưng phạm vi bài viết mình không đề cập).

Ví dụ chỉ định setup bin trong package.json của nodemon, khi cài đặt nó sẽ được npm tạo một file có thể execute trong node_modules/.bin:

JSON
1
2
3
"bin": {
"nodemon": "./bin/nodemon.js"
}
  1. Nếu có và hợp lệ thực thi file trong thư mục .bin

  2. Nếu không có thư viện, thực hiện việc cài đặt (nếu có flag --no-install thì bước này không chạy). Ví dụ npx nodemon --no-install.

Vì sao cần npx và khác biệt giữa nó với npm?

Nếu không có npx thì lúc bạn muốn chạy một thư viện bạn cần gõ hết cả đường dẫn ra như vầy node ./node_modules/.bin/example hoặc bỏ vào scripts của package.json.

JSON
1
2
3
4
5
6
7
{
"name": "myproject",
"version": "1.0.0",
"scripts": {
"example": "./node_modules/.bin/example"
}
}

Và chạy thì như sau npm run example.

Thay vì thế npx đơn giản hơn rất nhiều, chỉ với npx example mọi chuyện đã xong, không phải bỏ vào scripts gì cả.

Tóm lại

Đó là khác biệt lớn nhất giữa chúng, hãy luôn nhớ rằng chúng là khác nhau, dùng vào mục đích khác nhau nhé.

Liên kết

 Comments
Comment plugin failed to load
Loading comment plugin