錯誤訊息怎麼讀:不要看到紅字就慌

很多非工程師看到一大片紅色的錯誤訊息就慌了。但其實,你只需要知道怎麼找三個關鍵資訊

  1. 錯誤類型(通常在第一行或最後一行)
  2. 錯誤訊息(告訴你發生了什麼事)
  3. 出錯位置(在哪個檔案的第幾行)

來看一個實際的錯誤訊息:

Traceback (most recent call last):
File "/app/routes/user.py", line 42, in get_user
result = db.query("SELECT * FROM users WHERE id = " + user_id)
File "/app/database.py", line 15, in query
cursor.execute(sql)
TypeError: can only concatenate str (not "int") to str

拆解一下:

部分 在哪裡 告訴你什麼
TypeError 最後一行的開頭 錯誤類型:類型錯誤(數字和文字不能直接相加)
can only concatenate str... 最後一行的說明 錯誤原因:你想把「字串」和「整數」接在一起
user.py, line 42 中間的 Traceback 出錯位置:user.py 檔案的第 42 行
Traceback 中間部分 第 2-5 行 Stack trace:從哪裡開始、經過哪裡、在哪裡爆掉

Stack Trace = 麵包屑

比喻:追蹤犯罪現場。

Stack trace 就像犯罪現場的監視器畫面。它告訴你:

「嫌犯從 A 房間出發 → 經過 B 走廊 → 在 C 房間犯案」

最上面是起點,最下面是出事的地方。通常你只需要看最下面幾行就夠了。

常見錯誤類型速查

錯誤類型 白話意思 常見原因
TypeError 類型搞錯了 把數字當文字用、把空值當物件用
SyntaxError 語法寫錯了 少了括號、多了逗號、拼錯字
ReferenceError 找不到這個東西 變數名字打錯、忘了引入模組
404 Not Found 頁面不存在 網址打錯、檔案被刪了、路由沒設定
500 Internal Server Error 伺服器炸了 後端程式有 bug、資料庫連不上
403 Forbidden 你沒有權限 沒登入、API key 過期、IP 被擋
CORS Error 跨網域被擋 前端和後端網域不同,後端沒開放
ECONNREFUSED 連線被拒絕 服務沒啟動、port 錯誤
最有效的求助方式
看到錯誤訊息?整段複製貼給 Claude。不要只說「它壞了」或「跑不動」。

完整的錯誤訊息包含了 Claude 需要的所有線索:錯誤類型、出錯位置、呼叫堆疊。
你甚至不需要看懂它——直接複製貼上就是最好的溝通方式。

.env 環境變數:你的密碼本

為什麼密碼不能寫在程式碼裡?

想像這個場景:你寫了一個程式,裡面直接寫了你的資料庫密碼。然後你把程式碼上傳到 GitHub(一個公開的程式碼平台)。

恭喜,全世界都看到你的密碼了

這不是開玩笑。每天都有人因為把密碼上傳到 GitHub 而被駭客入侵。GitHub 上有專門的爬蟲,24 小時在掃描新上傳的 API 金鑰。

比喻:把保險箱密碼寫在大門上。

你不會把家裡保險箱的密碼寫在大門上對吧?

把密碼寫在程式碼裡再上傳到 GitHub,就是在做這件事。
程式碼是公開的 = 大門是透明的 = 所有人都看得到你的密碼。

.env 是什麼?

.env 就是「環境變數檔案」,白話說就是密碼本。它是一個純文字檔,裡面存放所有敏感資訊:

# .env 檔案的內容長這樣:

DATABASE_URL=postgresql://user:password123@localhost:5432/mydb
STRIPE_SECRET_KEY=sk_live_abc123def456
LINE_CHANNEL_SECRET=your_channel_secret_here
OPENAI_API_KEY=sk-proj-xxxxxxxxxxx

重點來了:.env 這個檔案只放在你的電腦上,絕對不上傳到 GitHub

怎麼確保不上傳?在 .gitignore(Git 的「忽略清單」)裡加上 .env,Git 就會自動忽略這個檔案。

.env.example 是什麼?

.env.example 是「密碼本的模板」。它告訴其他人「你需要填哪些密碼」,但不包含真實的值。

.env(真正的密碼本 — 不上傳)
DATABASE_URL=postgresql://admin:
 realpassword@db.example.com
STRIPE_KEY=sk_live_real_key_123
API_SECRET=my_actual_secret
.env.example(模板 — 可以上傳)
DATABASE_URL=your_database_url_here
STRIPE_KEY=your_stripe_key_here
API_SECRET=your_api_secret_here

# 只有欄位名稱,沒有真實值
必記原則
.env = 密碼本,只存在你的電腦上,絕不上傳。
.env.example = 密碼本模板,告訴別人需要填什麼,可以上傳。

如果 Claude 幫你寫的程式碼裡出現了 sk_live_password123 之類的真實密碼,馬上叫它改成環境變數

Git 基礎:程式碼的「追蹤修訂」

如果你用過 Word 的「追蹤修訂」功能,你就已經理解 Git 的核心概念了。

Git = 程式碼的追蹤修訂功能。

想像你在寫一篇論文。每隔一段時間你就「另存新檔」:論文v1、論文v2、論文v3...。這樣如果改壞了,還可以回到之前的版本。

Git 做的就是這件事,但比「另存新檔」高級一百倍:
- 它記錄每一次修改了什麼(不是整份文件的副本)
- 它可以讓多人同時編輯同一個專案
- 它可以把修改上傳到雲端(GitHub)備份

核心概念對照表

Git 術語 白話意思 生活比喻
commit 存一個紀錄點 遊戲的存檔點。隨時可以回到這裡
push 上傳到雲端 把存檔上傳到雲端備份(GitHub)
pull 從雲端下載 把別人的最新存檔下載下來
branch 分支 / 平行宇宙 在分支上改東西,不影響主線。安全地實驗
merge 合併 把平行宇宙合併回主線。實驗成功了就併入
clone 複製整個專案 把別人的專案整份複製到你的電腦上
staging 準備區 把要存檔的東西先放到「待存清單」

最常用的 5 個 Git 指令

# 1. 查看現在的狀態(有什麼檔案被改了?)
git status

# 2. 把修改的檔案加到「待存清單」
git add .     # 加全部
git add index.html # 只加指定檔案

# 3. 存檔(建立一個存檔點)
git commit -m "修好了登入頁面的 bug"

# 4. 上傳到 GitHub
git push

# 5. 下載別人的最新修改
git pull

Branch 的概念:平行宇宙

Branch 的運作方式

main(主線): A ── B ── C ── D ── E(穩定版本)
             \     /
feature/login:      X ── Y ──(實驗新功能)

在 C 的時候,你開了一個新分支叫 feature/login
在分支上做了 X 和 Y 兩次修改
測試沒問題後,在 E 的位置合併回 main
如果實驗失敗?直接刪掉分支,main 完全不受影響
你不需要手動打這些指令
大部分時候,Claude Code 會幫你處理 Git 操作。但你需要知道這些概念,這樣當 Claude 說「我幫你建了一個 branch」或「要不要 commit 這些修改」時,你才知道它在說什麼。

常用套件速覽

「套件」(Package)就是別人寫好的工具,你可以直接拿來用,不需要自己從頭寫。就像蓋房子不需要自己燒磚——去建材行買就好。

i18n(國際化 / 多語言支持)

超重要:一開始就要規劃!
i18n 是 internationalization 的縮寫(i 和 n 之間有 18 個字母)。它讓你的網站支援多國語言。

為什麼一開始就要規劃?因為如果你的網站寫了 200 頁之後才要加多語言,你得把 200 頁的文字一個一個抽出來。這是噩夢等級的工程。

一開始就規劃 i18n,就是把文字全部放在翻譯檔裡面(而不是寫死在程式碼裡)。之後要加新語言,只需要新增一個翻譯檔就好。

常見套件列表

套件 功能 白話說
Tailwind CSS 用 class 寫樣式 不用另外寫 CSS 檔,直接在 HTML 上寫 class 就有樣式。像是「預製傢俱」
React 前端 UI 框架 把網頁拆成一塊一塊的「元件」,重複使用。蓋積木式的網頁
Next.js React 的加強版 React + 路由 + SSR + API,一個框架搞定全部
Express Node.js 後端框架 用 JavaScript 寫後端 API 最常用的工具
Prisma 資料庫工具(ORM) 用 JavaScript 操作資料庫,不用寫 SQL。像是「資料庫翻譯機」
Zod 資料驗證 確保收到的資料格式正確。像是「品管員」
next-intl / i18next 多語言支持 讓你的網站支援中文、英文、日文等多國語言
Stripe 金流服務 讓你的網站能收信用卡。不用自己處理刷卡的複雜流程
Resend / Nodemailer 寄信服務 程式自動寄 email(驗證信、通知信、電子報)
Sharp 圖片處理 壓縮、裁切、轉檔圖片。讓網站載入更快
你不需要記住這些套件
這張表是給你「認臉」用的。當 Claude 說「我用 Prisma 幫你寫 DB 查詢」或「要不要加 Zod 做 input validation」的時候,你至少知道它在說什麼。

需要什麼套件?直接問 Claude:「我想做 XXX 功能,該用什麼套件?」