為啥服務啟動的默認端口總是 localhost:3000 ?
Hello,大家好,我是 Sunday。
不知道大家在開發的時候,有沒有注意過一個細節。那就是,每次啟動項目 npm run dev 的時候,終端啟動的端口號都是 3000
Local: http://localhost:3000/就跟大家都商量好的似的,項目全都擠在 3000 端口號門口。
為啥呢?
別急,這篇文章我們就來扒一扒:為什么幾乎所有的開發服務器,都喜歡跑在 localhost:3000 上。以及那些常見端口(3000、8000、8080、5173)背后的故事。
先搞清楚:端口到底是個啥?
想象一下,你的電腦其實就像一棟寫字樓。這棟樓里同時住著各種“公司”——瀏覽器、數據庫、聊天軟件、前端服務......而端口號(port),就是每家公司的門牌號。
比如,當你訪問:
http://localhost:3000/其實就相當于在這棟樓的 3000 號房間。
一臺電腦理論上有 65535 個門,但不同門的用途也不一樣,大致可以分成三類
范圍 | 類型 | 示例 |
0–1023 | 系統保留端口 | HTTP(80)、HTTPS(443)、SSH(22) |
1024–49151 | 用戶注冊端口 | 3000、8000、8080 |
49152–65535 | 臨時端口 | 系統隨機分配的連接 |
所以,3000 并不是什么特殊的地址。它只是這些“普通端口”里,一個沒人占、又好記的地址而已。
Node.js 的默認傳統
要說 3000 這個端口為什么能火,還得從Node.js 崛起的那幾年講起。
大概在 2010 年前后,Node.js + Express 瘋狂流行,當時官方文檔里有這樣一段最經典的示例代碼:
app.listen(3000, () => {
console.log('Server running on port 3000');
});對,就是這幾行。有點類似于 hello world。在培訓或者視頻課程中,很多老師都會把這段代碼原封不動的搬過去。
因此,3000 端口就被很多開發者熟悉了。后來的 React、Next.js、Vue CLI、Nuxt 等等的,為了保持一致性,也都沿用了這個默認端口。
所以你看,今天我們每次敲下 npm run dev,終端里蹦出來的那句 “Server running on port 3000”, 其實是在延續十幾年前 Node.js 的“文化遺產*”。
Python 的 8000 和 java 的 8080
而在 Node 之前,服務端語言還有 Python 和 Java。它們兩個的端口號就不是 3000 了。
先說 Java。
在很久很久以前(上世紀 90 年代),那時候想跑一個 Web 服務得用 80 端口。
但問題來了:80 端口是系統保留的,要管理員權限才能用。
于是聰明的 Java 開發者想了個折中方案,既然 80 不行,那就來個“雙八十”,也就是 8080
既保留了“HTTP”的象征,又能直接啟動服務。
后來 Tomcat、Jetty、Spring Boot 等 Java 服務端框架,全都默認跑在 8080 上,久而久之,8080 就成了“正經后端項目”的代名詞。
再說 Python
另一邊,Python 開發者也有自己的選擇:8000。
我們知道,Python 更講究“輕量”和“簡單”,只要在命令行里敲一句:
python3 -m http.server服務就能馬上跑起來,默認端口正是 8000。
同樣沒有什么特別原因,只因為安全、穩定、不沖突。
Django 也順勢繼承了這一習慣:
Starting development server at http://127.0.0.1:8000/Vite 的 5173
我們知道尤雨溪尤大開發了 Vite。
當我們使用 Vite 時,會發現 Vite 的端口默認啟動并不是 3000,二是 5173:
VITE v6.0 ready in 230ms
Local: http://localhost:5173/當時不少人都在想:“這 5173 是哪來的?怎么不是 3000 了?”
其實這個數字比較有意思,根據尤大的說法是:
51 代表了 “VI”,73 代表了 “TE”。所以 5173 就是 “VITE”
這波諧音梗是不是還挺惡搞的。。。????
一個小總結
- java:8080
- Python:8000
- Node:3000
- Vite:5173
咋說呢。這些默認的端口號其實就好像咱們總會在每個項目的最開頭寫下 hello world 一樣。






















