`npm run dev` 是一個長時間執行的程式

我收到了這個問題: 每次運行 npm run dev時,我得到的本地主機端口都不一樣。一開始是 3000,然後再次運行又得到了 3001,再次運行又得到了 3002。我們怎麼強制它使用 3000 端口? 在本地開發網站時,你可以使用 npm run dev 命令來啟動開發伺服器。 這是 Web 開發 中的常見做法,所有工具似乎都會使用這個程式,例如 Astro 和 Next.js 等等。 每次運行這個命令時,它都是一個長時間執行的進程,不會自動結束。 例如你運行 Astro 的開發伺服器,它會在 3000 端口上監聽: 然後你打開另一個終端,再次運行 npm run dev,這次它會在 3001 端口上運行: 現在你的應用程式同時在以下兩個地址上運行: http://localhost:3000 和 http://localhost:3001 你需要在終端中使用 ctrl-c 結束這兩個進程,以確保 3000 端口不被佔用,且在你嘗試打開 http://localhost:3000 時瀏覽器中不會顯示任何內容。 然後你可以再次運行 npm run dev,它會自動在空閒的 3000 端口上啟動。 每當你對項目進行更改(例如因為需要 npm install 某個套件),你需要使用 ctrl-c 結束開發伺服器,然後重新啟動它。

TCP Protocol

對傳輸控制協定(TCP)的高層次概述 TCP 代表傳輸控制協定,它是 Web 和其他應用程序(如郵件)的基礎。 TCP 在 1981 年的 RFC 793 中被定義,是互聯網最古老的支柱之一。 TCP 位於網際網路協定(IP)之上,建立了一個基礎系統,供應用層協定如 HTTP、FTP、IMAP 等使用。 與 IP 和 UDP 相反,TCP 是面向連接的。 在 TCP 上傳輸之前,必須建立連接。數據以小包的形式發送,並在通信結束時關閉連接。 在使用 TCP 傳輸數據時,有一個相對複雜的流程稱為握手必須發生。 我不會在這裡詳細介紹,但這個握手允許端對端的連接,並確保 TCP 提供其獨特的功能之一:可靠性。使用 TCP,我們始終可以知道發送者發送的封包是否被接收者正確接收。 如果封包丟失,協議能夠處理它並重新發送封包。 在 IP 協議中,連接由電腦到電腦進行。在 TCP 中,連接是從進程到進程的,使用了埠的概念。 與 IP 位址相關聯的埠用於唯一標識計算機上的進程,例如: localhost:8080 或 google.com:1234 每個應用層協定都有一個默認的埠。例如,HTTP 的默認埠是 80,HTTPS 的默認埠是 443,FTP 的默認埠是 21。這就是為什麼您通常不需要在瀏覽器中指定埠。 程序不需要使用默認值,這就是為什麼在本地計算機上啟動新應用程序時,您可能會看到類似 1313 或 8080 的埠。 埠號範圍從 1 到 65535(埠號是一個 16 位無符號數,對應於 2^16 個可能值)。

如何找出佔用特定通訊埠的程式

有時在同時開發多個應用程式或測試程式時,我會在電腦上運行多個程序,每個程序使用不同的通訊埠,例如:3000、3001、1313 等等。 如果不仔細注意,我可能會忘記哪個應用程式使用了特定的通訊埠。 我們可以用 lsof 命令來確定哪個程序正在監聽某個通訊埠。 執行以下命令: lsof -i :1313 將顯示當前在通訊埠 1313 上監聽的程序: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME hugo 8698 fla 4764u IPv4 0xc72ca30d18e45ef9 0t0 TCP localhost:bmc\_patroldb (LISTEN) 在這個例子中,佔用 1313 通訊埠的程序是 hugo,其進程 ID 是 8698。 如果要結束該程序,只需執行 kill 8698 命令即可。