portless:用命名本地 URL 取代連接埠號
將連接埠號碼替換為穩定的、命名的本機 URL。對於人類和特工來說。
秒懂
- 它是什麼?
- 在本機開發中,用穩定的命名 URL 取代連接埠號,面向開發者與自動化工具。
- 適合誰用?
- portless 為本機開發 URL 提供了一個具體方案,但 README 未涉及效能基準、安全性保證或生產就緒性。專案處於 pre-1.0 階段,狀態目錄格式可能變化。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 1 天前。
- 用什麼語言寫的?
- 主要是 TypeScript(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。
開源專案深度解析
portless 取代了什麼
portless 在本機開發中將連接埠號替換為穩定、命名的位址。你不再需要記住應用程式執行在 http://localhost:3000,而是得到 https://myapp.localhost。專案自述為面向人與代理設計,意味著命名 URL 既便於人類輸入,也便於自動化工具引用。README 展示的典型變化是:next dev 變為 portless run next dev,輸出 URL 基於你提供的應用名稱。
portless 在「portless 取代了什麼」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
採用前可在隔離目錄以 portless 的 README 指定入口開始,記錄命令回傳、產物位置及錯誤訊息,再對照同一份文件的限制段落。若命令、設定鍵或資料格式在來源中沒有明確說明,就應視為待確認事項,而不是預設功能。
安裝與系統需求
可透過 npm install -g portless 全域安裝,或透過 npm install -D portless 作為專案開發依賴。README 指出專案尚未發布 1.0 版本,因此按專案安裝時不同貢獻者可能執行不同版本,且狀態目錄格式可能隨版本變化,這可能需要重新執行 portless trust。官方列出的需求是 Node.js 24+ 以及 macOS、Linux 或 Windows。Tailscale 與 ngrok CLI 為可選項目,僅在使用分享功能時需要。
portless 在「安裝與系統需求」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
設定:portless.json 與 package.json 鍵
裸執行 portless 會透過代理執行 package.json 中的 dev 指令碼,並從套件名稱、git 根目錄或目前目錄推斷應用名稱。你可以使用包含 name 欄位的 portless.json 覆蓋預設名稱,指令碼預設值為 dev。對於 monorepo,根目錄的單一 portless.json 可覆蓋所有工作區套件,套件發現來自 pnpm-workspace.yaml 或 package.json 的 workspaces 欄位。apps 對應允許按套件覆蓋名稱,主機名稱預設遵循 <package>.<project>.localhost 約定,除非套件名稱與專案名稱相同。,package.json 中的 "portless" 鍵可設定名稱或每個應用程式的選項,其優先級高於 portless.json 條目,但會被 CLI 旗標覆蓋。
portless 在「設定:portless.json 與 package.json 鍵」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
命名路由、子網域與 worktree
portless 為每個應用程式分配 4000-4999 範圍內的空閒連接埠,並註冊到代理。你可以指定名稱與指令,如 portless api.myapp pnpm start,得到 https://api.myapp.localhost。預設僅路由明確註冊的子網域,--wildcard 允許任意子網域回退到父應用程式。Git worktree 會被自動偵測:關聯的 worktree 會將分支名稱作為子網域前置詞,使每個 worktree 獲得獨立 URL,無需額外設定。使用 --name 可在保留 worktree 前置詞的同時覆蓋基礎名稱。
portless 在「命名路由、子網域與 worktree」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
HTTPS、本機 CA 與自訂 TLD
預設啟用 HTTPS 與 HTTP/2。首次執行時,portless 會產生本機 CA、信任該 CA 並綁定 443 連接埠,在 macOS 與 Linux 上自動使用 sudo 提權。可使用 --no-tls 切換到純 HTTP。代理在執行應用程式時自動啟動,並複用最近一次執行的設定,除非被環境變數覆蓋。自訂 TLD 透過 --tld 支援,例如 .test,代理會自動同步 /etc/hosts 以解析路由主機名稱。多段 TLD 如 dev.example.com 也允許,這可使 OAuth 重新導向 URI 與 cookie 與生產環境保持一致。README 推薦 .test,並針對 .local 與 .dev 給出了具體的技術警告。
portless 在「HTTPS、本機 CA 與自訂 TLD」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
分享開發伺服器
portless 提供三種分享模式。LAN 模式(--lan)將代理綁定到所有介面,並使用 mDNS 在區域網路內發布 .local 名稱,支援自動偵測 LAN IP。Tailscale 分享(--tailscale)將每個應用程式掛載到 tailnet 中獨立的 HTTPS 連接埠,使用你已有的 Tailscale HTTPS 憑證。Funnel(--funnel)透過 Tailscale Funnel 將應用程式暴露到公網。ngrok 分享(--ngrok)透過 ngrok 建立公網 URL。每種模式都有各自的前置條件:Tailscale CLI 與啟用 HTTPS 憑證,ngrok CLI 與驗證,以及 LAN 模式所需的 mDNS 工具(Linux 為 avahi-utils)。環境變數如 PORTLESS_LAN=1 可將模式設為預設。
portless 在「分享開發伺服器」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
操作指令與清理
指令集包括 portless run 以推斷名稱、portless alias 設定靜態路由、portless list 顯示活動路由、portless doctor 進行診斷、portless trust 安裝 CA、portless clean 移除全部狀態與信任條目,以及 portless prune 清理崩潰工作階段的孤兒程序。還有代理控制指令:portless proxy start、stop,以及 --port、--no-tls、--foreground、--wildcard 等選項。可透過 portless service install 將代理安裝為作業系統啟動服務,使用 launchd、systemd 或工作排程器。README 列出了覆蓋代理設定的環境變數,以及注入到子程序的變數,如 PORT 與 PORTLESS_URL。若要單次繞過 portless,可設定 PORTLESS=0。
portless 在「操作指令與清理」這一面向的判讀要落在具體材料上:portless、portless.json、package.json、PORTLESS_PORT、PORTLESS_URL、portless doctor、portless trust、portless list、portless clean、portless proxy start、--no-tls、--wildcard、--lan、--tailscale、--ngrok 與 4000-4999 連接埠範圍。這些名稱是讀者檢查輸入、執行路徑與輸出結果時可直接搜尋的記號。對於 README 沒有交代的作業系統差異、效能數字、相容版本或安全承諾,本文保留為未知,不把推測寫成能力。
編輯結論
portless 為本機開發 URL 提供了一個具體方案,但 README 未涉及效能基準、安全性保證或生產就緒性。專案處於 pre-1.0 階段,狀態目錄格式可能變化。使用者需自行驗證 CA 信任行為與平台細節。 使用者適合先以 portless 的 README 命令和具體檔案做小範圍核對;不適合把 portless 的倉庫統計當成生產保證。
社群筆記