- 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
Đã đượ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.
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.
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.
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.
Bài viết hữu ích đấy
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
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