33 điểm bởi xguru 2026-03-02 | 7 bình luận | Chia sẻ qua WhatsApp
  • Tiện ích mã nguồn mở của Vercel Labs giúp giải quyết xung đột cổng khi phát triển cục bộ và nỗi khổ phải nhớ đã dùng cổng số mấy
  • Gán cho mỗi máy chủ phát triển một subdomain app.localhost riêng, cung cấp hệ thống URL mà cả con người lẫn tác nhân AI đều có thể nhận biết
    Chạy bằng next dev thì sẽ là http://localhost:3000, nên phải nhớ số 3000
    Nhưng khi chạy portless myapp next dev thì có thể truy cập dưới dạng http://myapp.localhost:1355
    Nếu chạy như portless api.myapp pnpm start thì cũng hỗ trợ truy cập subdomain tại http://api.myapp.localhost:1355
  • Hoạt động theo kiến trúc dựa trên proxy, với portless proxy định tuyến yêu cầu ở trung tâm
    • Khi chạy ứng dụng, proxy sẽ tự động khởi động và mỗi ứng dụng được gán vào một cổng ngẫu nhiên (4000–4999)
    • Hầu hết các framework (Next.js, Express, Nuxt, v.v.) tự động nhận biết biến môi trường PORT
    • Với một số framework như Vite, Astro, khả năng tương thích được đảm bảo bằng tính năng tự động chèn cờ
  • Hỗ trợ HTTP/2 và HTTPS để hiện thực giao tiếp cục bộ nhanh và an toàn
    • Trình duyệt giới hạn HTTP/1.1 ở 6 kết nối cho mỗi host
      • Làm giảm hiệu năng của các máy chủ phát triển như Vite/Nuxt vốn cung cấp nhiều tệp chưa nén
      • HTTP/2 ghép kênh mọi yêu cầu trên một kết nối duy nhất
    • Tự động tạo chứng chỉ riêng và đăng ký vào kho tin cậy của hệ thống
    • Cũng có thể áp dụng chứng chỉ tùy chỉnh bằng tùy chọn --cert, --key
  • Cung cấp giao diện CLI lấy lệnh làm trung tâm
    • portless <name> <cmd> : chạy ứng dụng với tên được chỉ định
    • portless list : hiển thị danh sách route đang hoạt động
    • portless proxy start/stop : điều khiển proxy
    • Có thể chạy bỏ qua proxy bằng biến môi trường PORTLESS=0
  • Lưu thông tin route và PID thông qua thư mục quản lý trạng thái
    • Ở chế độ người dùng thông thường dùng ~/.portless, ở chế độ root dùng /tmp/portless
    • Có thể ghi đè đường dẫn bằng PORTLESS_STATE_DIR
  • Khi cấu hình API proxy trong Vite, webpack-dev-server v.v., cần ghi lại header Host
    • Nếu cấu hình sai, hệ thống sẽ hướng dẫn vấn đề bằng phản hồi 508 Loop Detected
  • Hỗ trợ Node.js 20 trở lên và môi trường macOS, Linux
  • Cấu trúc monorepo dựa trên pnpm + Turborepo
  • Giấy phép Apache-2.0, codebase TypeScript (khoảng 74%)

7 bình luận

 
xguru 2026-03-05

Đã được cập nhật để hỗ trợ worktree.

https://github.com/vercel-labs/portless/releases/tag/v0.5.2

Giờ đây công cụ sẽ tự động nhận diện worktree và thêm tên nhánh vào trước host.

 
ragingwind 2026-03-02

Tôi không dùng nó vì nó không thực sự phù hợp với worktree của cùng một dự án.

 
ndrgrd 2026-03-02

Tôi cứ tưởng nó sẽ tự động gán, nhưng hóa ra chỉ là kiểu tự đăng ký thôi.
Tôi đang dùng Caddy nên có lẽ cũng không có lý do gì để phải chuyển sang cái này.

 
ksc2601 2026-03-02

Mình đã làm việc này bằng docker + traefik + mkcert rồi, nhưng có vẻ dùng cái đó sẽ tiện hơn.

 
bytecakelake 2026-03-02

Bài viết hữu ích đấy

 
xguru 2026-03-02

Vậy là giờ có thể tạm biệt lỗi EADDRINUSE rồi à?

Dạo này phát triển đủ thứ thông qua agent, cứ bật linh tinh lên là chúng nó lại tự va vào nhau, loạn cả lên ấy haha

 
xguru 2026-03-02

Có người đã nhắc đến điều này trên X, và nếu dùng trong Docker thì nghe nói là ép truyền PID của Docker daemon vào cũng sẽ hoạt động.

https://github.com/vercel-labs/portless/issues/61