Featured image of post npx là gì? Tại sao nó có thể chạy các gói mà không cần cài đặt?

npx là gì? Tại sao nó có thể chạy các gói mà không cần cài đặt?

Mở khóa bí mật của npx! Chạy các gói mà không cần cài đặt? Giải quyết các vấn đề đau đầu khi cài đặt npm toàn cầu và trải nghiệm sự phát triển nhanh chóng, chính xác và hiệu quả của Vibe Coding.

Bạn đã bao giờ phải sử dụng npm install -g để cài đặt một công cụ (như create-next-app hoặc eslint) chỉ để chạy nó chưa? Theo thời gian, máy tính của bạn chất đống các phiên bản cũ của các gói toàn cầu đã cài đặt từ bao giờ, khiến môi trường trở nên lộn xộn.

Nếu có một cách để chúng ta thực thi các chức năng của gói mà

Mục tiêu Mô tả
Sử dụng phiên bản mới nhất Chỉ gọi phiên bản mới nhất của công cụ khi cần thiết
Không tốn không gian Dùng xong bỏ, hoàn toàn không tốn không gian khi không cần thiết

Đây là thời điểm npx xuất hiện.

Khái niệm cốt lõi của npx: “Flash Mob” của giới lập trình

Hãy tưởng tượng hôm nay bạn muốn ăn lẩu cay.

Chế độ Mô tả
npm install Bạn mua trọn bộ nồi, chảo, bếp và nước dùng (lưu trữ cục bộ hoặc toàn cầu). Bạn có thể ăn bất cứ lúc nào, nhưng chúng chiếm nhiều không gian bếp, và nếu để lâu không rửa sẽ bị mốc (phiên bản cũ).
npx Bạn gọi một “đầu bếp nhanh” mang dụng cụ trực tiếp đến nhà bạn, nấu bữa ăn này, rửa nồi và rút lui. Bếp của bạn vẫn sạch sẽ, và đảm bảo đầu bếp luôn mang theo nước dùng mới nhất mỗi lần.

Chế độ “chỉ thuê” này là hiện thân của tinh thần Vibe Coding:

Theo đuổi môi trường tối giản, luôn sử dụng phiên bản mới nhất, và tập trung năng lượng vào việc tạo ra giá trị, không phải duy trì môi trường lộn xộn.

Logic tìm kiếm: Hơn cả việc tải xuống và chạy

Khi bạn nhập npx <tên-gói>, nó sẽ khởi tạo logic quy trình “tìm kiếm chương trình có thể thực thi”:

Quy trình Mô tả
1. Kiểm tra ở nhà trước Kiểm tra xem lệnh đã tồn tại trong node_modules/.bin cục bộ của dự án hoặc môi trường toàn cầu chưa.
2. Tải về nếu không tìm thấy Nếu không tìm thấy, nó sẽ tự động đến npm registry để tải xuống một “phiên bản tạm thời”.
3. Hủy bỏ sau khi thực thi Sau khi chạy lệnh, gói này sẽ không ở lại trong máy tính của bạn chiếm không gian.

Điều này đặc biệt dễ nhận thấy khi thực thi các gói dự án cục bộ. Trước đây, chúng ta phải chạy ./node_modules/.bin/tailwind-cli, một đường dẫn dài đến mức muốn khóc; bây giờ chỉ cần gõ mạnh dạn vào thư mục gốc của dự án:

npx tailwind-cli build

Nó giống như một quản gia hiểu biết, biết bạn đã cài đặt gì trong dự án và trực tiếp giúp bạn căn chỉnh đường dẫn để thực thi.

npx làm thế nào để biết lệnh gói nào cần thực thi?

Bạn có thể tò mò, đối với các lệnh như npx skills add vercel-labs/agent-skills, làm thế nào npx tìm thấy mã đám mây từ một từ đơn?

Điều này là nhờ vào thẻ căn cước package.json của gói. Trong cài đặt gói, các nhà phát triển định nghĩa trường bin:

{
  "name": "skills",
  "bin": {
    "skills": "./bin/cli.mjs",
    "add-skill": "./bin/cli.mjs"
  }
}

Điều này hoạt động như “cửa sổ bên ngoài” của gói. Khi bạn gọi npx skills, điều sau sẽ xảy ra:

Bước Mô tả
1 npx sẽ đến npm registry để tìm kiếm gói có tên skills
2 Thực thi tập lệnh đã đăng ký trong bin của nó.

Về việc “làm thế nào để xây nhà (add cài đặt gói)”, đó là kỹ thuật chuyên môn của gói này (gói skills).

Mẹo nâng cao: Tên và Lệnh không khớp?

Nếu tên gói là tools-package, nhưng lệnh lại được gọi là run-me thì sao? Hoặc nếu bạn muốn chỉ định một phiên bản cũ cụ thể để kiểm tra?

Tại thời điểm này, chúng ta ngừng dựa vào chế độ tự động và chuyển sang phương pháp “chỉ định gói”:

npx -p [email protected] run-me "Show me the way"
Lệnh Mô tả
-p [email protected] Nói với npx tải xuống gói cụ thể này cho bạn.
run-me Đây là lệnh bạn muốn chạy.

Kết luận

npx đã thay đổi hoàn toàn thói quen sử dụng các công cụ CLI của chúng ta. Nó cho phép các nhà phát triển quản lý các công cụ theo cách nhẹ nhàng, linh hoạt hơn, không còn bị ràng buộc bởi các cài đặt môi trường phức tạp.

Quy trình thanh lịch “có mặt mọi nơi, gọi là có” này cho phép bạn hoàn thành các nhiệm vụ nhanh chóng, chính xác và dứt khoát theo nhịp điệu của Vibe Coding!

Reference

All rights reserved,未經允許不得隨意轉載
Built with Hugo
Theme Stack thiết kế bởi Jimmy