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-đó
:
- Đầ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ụcnode_modules/.bin
. Để file nằm được trong này thì chính thư viện đó cần config trongpackage.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
:
1 | "bin": { |
Nếu có và hợp lệ thực thi file trong thư mục .bin
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
.
1 | { |
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é.