戰(zhàn):半天搭建Spring Boot+Vue3前后端分離項(xiàng)目)
半天時(shí)間我用Claude Code擼了一個(gè)前后端分離項(xiàng)目這周請(qǐng)了兩天假本來想好好休息一下結(jié)果手癢沒忍住用Claude Code試了試水。結(jié)果半天時(shí)間一個(gè)前后端分離的完整項(xiàng)目就落地了——前端Vue3 后端Spring Boot數(shù)據(jù)庫、接口文檔、部署腳本全齊活。說實(shí)話這個(gè)效率放在幾年前完全不敢想。先交代一下我的背景寫了快十年Java前端屬于那種能跑就行的水平日常開發(fā)最煩的就是寫CRUD接口和調(diào)樣式。所以當(dāng)我第一次用Claude Code的時(shí)候心里是有點(diǎn)懷疑的——這玩意兒真能幫我干活事實(shí)證明它不僅幫我干活了而且干得比我想象中好得多。這篇文章我把自己從安裝到實(shí)戰(zhàn)的完整過程、踩過的坑、以及我對(duì)這類AI編程工具的思考都整理出來希望對(duì)你也有幫助。先說結(jié)論如果你是個(gè)程序員無論你做前端還是后端無論你用沒用過AI編程工具Claude Code都值得你花一個(gè)下午認(rèn)真試試。尤其你手上正好有一個(gè)前后端分離的練手項(xiàng)目或者工作里經(jīng)常要寫一些基礎(chǔ)模塊它能幫你節(jié)省大量重復(fù)勞動(dòng)的時(shí)間。當(dāng)然它不是萬能的該踩的坑我一個(gè)沒少踩下面詳細(xì)說。1. 為什么選Claude Code這個(gè)AI編程助手和別的有什么不一樣1.1 核心解決了什么問題前后端分離項(xiàng)目大家都知道流程無非是搭前端框架、寫后端接口、聯(lián)調(diào)、測試、部署。聽起來不復(fù)雜但每一步都有大量的重復(fù)性工作。以前我搭一個(gè)簡單的管理后臺(tái)光初始化工程、寫用戶登錄注冊、做幾個(gè)增刪改查頁面至少得兩天。用Claude Code的核心變化在于它把寫代碼這個(gè)動(dòng)作從逐字符敲變成了描述需求等結(jié)果。我只需要用自然語言告訴它我要一個(gè)用戶管理模塊包含列表、新增、編輯、刪除功能后端用Spring Boot前端用Vue3它就能自動(dòng)分析需求然后自己決定先創(chuàng)建哪些文件、怎么組織目錄結(jié)構(gòu)、怎么寫接口最終產(chǎn)出一整套可以運(yùn)行的前后端代碼。這個(gè)過程有點(diǎn)像你帶了一個(gè)完全熟悉你技術(shù)棧的實(shí)習(xí)生你跟他說清楚需求他就能把活干完干完之后你還得檢查一下質(zhì)量。1.2 和Codex等工具的核心差異現(xiàn)在市面上AI編程工具不少OpenAI的CodexGitHub Copilot還有各種基于大模型的IDE插件。我在選型的時(shí)候重點(diǎn)對(duì)比了Codex和Claude Code這里直接說我的結(jié)論交互方式不同Claude Code是一個(gè)命令行工具跑在終端里和你的開發(fā)環(huán)境深度融合。它不是簡單的對(duì)話窗口而是能直接操作你項(xiàng)目里的文件的Agent。Codex相對(duì)更偏向?qū)υ捠捷o助雖然也能操作代碼但整體體驗(yàn)不如Claude Code來得自主。對(duì)項(xiàng)目的理解能力Claude Code在分析項(xiàng)目結(jié)構(gòu)、理解現(xiàn)有代碼方面做得相當(dāng)好。你打開一個(gè)項(xiàng)目目錄它能自己瀏覽文件、理清模塊之間的關(guān)系然后基于整體上下文去改代碼。這一點(diǎn)比單純的根據(jù)你的問題生成一段代碼要強(qiáng)太多。前后端分離場景的貼合度Claude Code的Agent模式特別適合前后端分離這種多端協(xié)同的項(xiàng)目。它可以在后端寫個(gè)接口然后自動(dòng)去前端把對(duì)應(yīng)的請(qǐng)求代碼也寫了這種端到端的能力是我選它的決定性因素。1.3 適合什么人來用說句實(shí)在話Claude Code不是給完全零基礎(chǔ)的人用的。它適合的人群有兩類第一類是像我這樣有一定開發(fā)經(jīng)驗(yàn)的人。你懂業(yè)務(wù)邏輯能發(fā)現(xiàn)問題能做技術(shù)決策Claude Code負(fù)責(zé)快速實(shí)現(xiàn)。這時(shí)候它就是效率放大器。第二類是正在學(xué)習(xí)編程的人。前提是你愿意讀它生成的代碼而不是無腦復(fù)制粘貼。Claude Code寫出來的代碼質(zhì)量整體不錯(cuò)看它怎么組織代碼、怎么寫注釋其實(shí)是一種很好的學(xué)習(xí)方式。但如果你完全不懂代碼想靠它憑空變出一個(gè)能上線的項(xiàng)目那大概率會(huì)翻車。因?yàn)锳I生成的代碼可能有bug可能有安全隱患甚至可能架構(gòu)設(shè)計(jì)就不合理這些都需要人來把關(guān)。2. 環(huán)境準(zhǔn)備與安裝從零到能用只需十分鐘2.1 安裝前置條件Claude Code的安裝其實(shí)非常簡單官網(wǎng)給的文檔也很齊全。你只需要準(zhǔn)備兩樣?xùn)|西一個(gè)Node.js環(huán)境版本要求我記得是18以上最好用最新的LTS版本一個(gè)Claude的賬號(hào)以及API密鑰Node.js這個(gè)不用我多說前后端分離項(xiàng)目里前端構(gòu)建工具Vite、Webpack都依賴它。如果你電腦上還沒有Node.js去官網(wǎng)下載安裝包一鍵裝上就行。裝完之后在終端里驗(yàn)證一下node -v npm -v能看到版本號(hào)就說明沒問題。2.2 安裝Claude Code安裝Claude Code用的是npm一行命令搞定npm install -g anthropic-ai/claude-code這里有個(gè)小細(xì)節(jié)值得注意安裝完之后你可能需要配置PATH環(huán)境變量。我自己在Windows和Mac上都裝過Windows上偶爾會(huì)遇到claude不是內(nèi)部或外部命令的報(bào)錯(cuò)這時(shí)候檢查一下npm全局安裝目錄有沒有加到PATH里就行。# 查看npm全局安裝路徑 npm prefix -g把輸出結(jié)果加到系統(tǒng)PATH環(huán)境變量里重新打開終端就OK了。Mac上一般不用操心這個(gè)因?yàn)镠omebrew安裝的Node.js會(huì)自動(dòng)配置好。2.3 配置API密鑰和模型參數(shù)安裝完成后需要配置API密鑰。第一次運(yùn)行claude命令的時(shí)候它會(huì)引導(dǎo)你登錄賬號(hào)或者你可以手動(dòng)設(shè)置環(huán)境變量export ANTHROPIC_API_KEY你的API密鑰Windows上可以用setx命令設(shè)置或者直接在環(huán)境變量里添加。關(guān)于模型參數(shù)Claude Code默認(rèn)用的是Anthropic的最新模型日常夠用了。如果你有特殊需求可以通過配置文件調(diào)整比如設(shè)置claudeModel參數(shù)來選擇不同的模型版本。這一塊我不展開太多因?yàn)閷?duì)大多數(shù)人來說默認(rèn)配置就已經(jīng)很好用。2.4 在VS Code里使用Claude Code用命令行跑Claude Code已經(jīng)很好用了但我更推薦你配一個(gè)VS Code的Claude Code插件。官方插件在VS Code插件市場里直接搜Claude Code就能找到。裝上插件之后你可以在編輯器側(cè)邊欄直接和Claude對(duì)話它能看到你當(dāng)前打開的文件、項(xiàng)目目錄結(jié)構(gòu)然后給出建議或者直接幫你改代碼。實(shí)測下來插件的體驗(yàn)比純終端交互更直觀尤其是看它修改代碼的時(shí)候左邊是原文件右邊是修改后的diff一目了然。提示如果你本地裝了Ollama之類的本地大模型也可以通過配置把Claude Code接到本地模型上。但對(duì)大多數(shù)人來說直接用官方API體驗(yàn)最好省心。3. 半天實(shí)戰(zhàn)從零搭建一個(gè)前后端分離項(xiàng)目3.1 明確需求別什么都指望AI先把需求說清楚。我要做的項(xiàng)目是一個(gè)簡單的任務(wù)管理系統(tǒng)功能包括用戶注冊登錄JWT鑒權(quán)任務(wù)的增刪改查支持分頁查詢?nèi)蝿?wù)的狀態(tài)流轉(zhuǎn)待辦、進(jìn)行中、已完成前端頁面登錄頁、注冊頁、任務(wù)列表頁、任務(wù)編輯頁技術(shù)棧定為后端Spring Boot 2.7 MyBatis-Plus MySQL前端Vue3 Vite Element Plus Axios。這個(gè)需求屬于非常典型的CRUD應(yīng)用邏輯清晰、邊界明確。Claude Code對(duì)于這種需求的完成度非常高因?yàn)樗娺^太多類似的項(xiàng)目了代碼模式早就固化在它的記憶里。3.2 初始化項(xiàng)目結(jié)構(gòu)我建議你在開始之前自己先把項(xiàng)目的空目錄結(jié)構(gòu)建好然后告訴Claude Code在這個(gè)目錄下創(chuàng)建前后端分離項(xiàng)目。這樣它就能清晰地知道前后端代碼該放哪里而不是把一堆文件全塞在根目錄下。mkdir task-manager cd task-manager mkdir backend frontend然后啟動(dòng)Claude Codecd task-manager claude進(jìn)入交互界面之后第一條指令我寫的是這是一個(gè)前后端分離項(xiàng)目backend目錄下創(chuàng)建一個(gè)Spring Boot項(xiàng)目前端在frontend目錄下創(chuàng)建一個(gè)Vue3項(xiàng)目。先幫我看看當(dāng)前目錄結(jié)構(gòu)然后分別初始化兩個(gè)項(xiàng)目的基礎(chǔ)架構(gòu)。它很快就回復(fù)了它的計(jì)劃經(jīng)過我確認(rèn)后開始動(dòng)手。這里有個(gè)很好的習(xí)慣值得分享在讓AI動(dòng)手之前先讓它說出自己的計(jì)劃。一方面你可以確認(rèn)它理解得對(duì)不對(duì)另一方面如果方向偏了你還能及時(shí)糾正避免白干。3.3 后端開發(fā)讓它先搭建數(shù)據(jù)庫和實(shí)體層后端部分我做的第一件事是設(shè)計(jì)數(shù)據(jù)庫表。我直接告訴Claude Code設(shè)計(jì)兩張表sys_user和tasksys_user存用戶信息id、username、password、create_timetask存任務(wù)信息id、user_id、title、description、status、create_time、update_time。然后根據(jù)表結(jié)構(gòu)生成實(shí)體類、Mapper接口、Service和Controller實(shí)現(xiàn)用戶注冊登錄和任務(wù)的增刪改查。這個(gè)過程Claude Code干了大概五分鐘。它自己創(chuàng)建了Entity、Mapper、Service、ServiceImpl、Controller還把MyBatis-Plus的配置都寫好了。我只需要做一件事把數(shù)據(jù)庫連接配置改成本地的賬號(hào)密碼。生成完代碼之后我讓它把啟動(dòng)類跑起來測試一下接口是不是通的它給的回復(fù)是你可以用如下方式啟動(dòng)啟動(dòng)后訪問http://localhost:8080/api/users/register做驗(yàn)證。雖然它沒法完全代替我去調(diào)試但這些指令已經(jīng)足夠清晰了。3.4 前端開發(fā)風(fēng)格統(tǒng)一且能用后端搞定之后我切到前端目錄在frontend目錄下創(chuàng)建一個(gè)Vue3項(xiàng)目使用Vite構(gòu)建工具UI框架用Element Plus安裝Axios。創(chuàng)建登錄頁、注冊頁、任務(wù)列表頁、任務(wù)編輯頁用Vue Router管理路由。登錄后把token存在localStorageAxios請(qǐng)求攔截器里自動(dòng)帶上token。前端這部分對(duì)我的挑戰(zhàn)比較大——我平時(shí)寫前端最頭疼的就是各種CSS細(xì)節(jié)。Claude Code生成的頁面使用了Element Plus的現(xiàn)成組件界面風(fēng)格統(tǒng)一幾乎不需要我自己寫樣式。它還自動(dòng)處理了路由守衛(wèi)未登錄的用戶訪問任務(wù)列表會(huì)自動(dòng)跳轉(zhuǎn)到登錄頁。這里有個(gè)細(xì)節(jié)值得說Claude Code生成的代碼命名規(guī)范非常統(tǒng)一。不管是用例還是配置不管是組件名還是方法名風(fēng)格都很一致這比很多開發(fā)者的手寫代碼還要規(guī)范。代碼里注釋也寫得恰到好處不是廢話注釋是能幫你理解邏輯那種。3.5 接口聯(lián)調(diào)AI幫你把兩邊的接口對(duì)接好后端在前端開發(fā)過程中我一直在它生成的API文檔里查接口定義。更省事的是Claude Code在寫完后端接口后會(huì)在接口的注釋里生成類似Swagger的描述前端部分對(duì)接的時(shí)候完全不需要問我這個(gè)接口的返回值是什么它自己就能看到后端的代碼定義。聯(lián)調(diào)階段我讓它把前端的用戶登錄接口和后端的登錄接口對(duì)齊它自己檢查了一遍URL和參數(shù)格式很快發(fā)現(xiàn)了一個(gè)問題后端返回的字段叫accessToken前端代碼里取的卻是token。這種情況放在以前我得前后端來回切著看代碼才能發(fā)現(xiàn)現(xiàn)在它幾秒鐘就搞定了。3.6 項(xiàng)目部署一條命令發(fā)布到服務(wù)器項(xiàng)目開發(fā)完成后部署也是前后端分離項(xiàng)目的一個(gè)大坑。我讓Claude Code幫我寫一份部署文檔包括后端怎么打包mvn package前端怎么構(gòu)建npm run buildNginx怎么配置反向代理和靜態(tài)文件服務(wù)它還幫我寫了一個(gè)一鍵部署腳本通過SSH登錄服務(wù)器、上傳文件、重啟服務(wù)一氣呵成。這些腳本邏輯不復(fù)雜但把它寫在文檔里非常省心照著執(zhí)行就行。4. 實(shí)操過程中的12個(gè)問題與排查技巧4.1 常見報(bào)錯(cuò)與解決方案我把自己實(shí)際操作中遇到的一些常見問題整理了一下你可以收藏本文真正用到時(shí)再回來對(duì)照。問題可能原因解決方案claude命令找不到npm全局目錄不在PATH中檢查npm prefix添加環(huán)境變量Claude Code亂碼終端編碼問題Windows下執(zhí)行chcp 65001切換為UTF-8編碼API請(qǐng)求超時(shí)網(wǎng)絡(luò)不穩(wěn)定重試或檢查代理設(shè)置模型返回內(nèi)容截?cái)嗌舷挛倪^長分模塊讓它處理別一次塞太多需求修改不生效AI修改的文件和當(dāng)前打開的文件沖突保存文件后重新讓其讀取最新代碼你所在組織已禁用Claude訂閱訪問賬號(hào)問題檢查賬號(hào)權(quán)限確認(rèn)API密鑰是否有效前后端聯(lián)調(diào)接口對(duì)不上字段定義不一致把前后端對(duì)應(yīng)代碼丟給它對(duì)比讓它自查生成的代碼有低級(jí)bug需求描述不清晰嘗試拆小需求分步交付反復(fù)修改卻越改越差上下文丟失新開對(duì)話把需求重新說一遍帶上關(guān)鍵的文件內(nèi)容數(shù)據(jù)庫連接失敗賬號(hào)密碼配置錯(cuò)誤檢查組態(tài)文件特別是yml里的縮進(jìn)前端樣式錯(cuò)亂CSS沖突讓它使用scoped樣式明確組件邊界想用DeepSeek等第三方模型默認(rèn)模型不滿足需求按官方文檔配置第三方API地址但注意兼容性4.2 代碼生成質(zhì)量的控制方法這里必須展開說說反復(fù)修改越改越差這個(gè)問題。我第一次用的時(shí)候讓它改一個(gè)功能模塊連續(xù)改了三輪都不對(duì)。后來發(fā)現(xiàn)是我自己的鍋——我把它生成的舊代碼手動(dòng)改了再讓它繼續(xù)改時(shí)會(huì)加載到新舊混雜的代碼邏輯自然就亂了。正確的做法是改之前先明確告訴它保留A刪除B把C改成D。這樣它的修改就是精準(zhǔn)的不會(huì)誤傷其他功能。另外項(xiàng)目規(guī)模比較大的時(shí)候建議每周手動(dòng)提交一次代碼這樣萬一AI改壞了還能用git回滾。4.3 Token消耗技巧省錢和續(xù)命的關(guān)鍵很多人在網(wǎng)上吐槽Claude Code太費(fèi)token其實(shí)大多是因?yàn)槭褂梅椒ú粚?duì)。我的經(jīng)驗(yàn)是會(huì)話別開太久干完一個(gè)大模塊就重開一個(gè)會(huì)話這樣上下文重新開始消耗的token會(huì)少很多。善于使用子代理Claude Code支持在任務(wù)中再開一個(gè)子對(duì)話子對(duì)話的上下文和主對(duì)話是隔離的適合獨(dú)立的小任務(wù)。項(xiàng)目索引控制在合理范圍如果你項(xiàng)目里有一個(gè)巨大的node_modules目錄它默認(rèn)會(huì)忽略掉不會(huì)浪費(fèi)token去讀這些文件。實(shí)測下來我建一個(gè)完整的CRUD項(xiàng)目、包含前后端大概消耗的token量相當(dāng)于幾十萬字的內(nèi)容折算成費(fèi)用在幾塊錢到十幾塊錢人民幣之間。相比請(qǐng)一個(gè)實(shí)習(xí)生或者外包這個(gè)成本幾乎可以忽略不計(jì)。5. 實(shí)戰(zhàn)總結(jié)我對(duì)Claude Code的幾點(diǎn)經(jīng)驗(yàn)與心得5.1 它能做到什么不能做到什么用了一個(gè)周末我對(duì)Claude Code的能力邊界有了一個(gè)比較清晰的認(rèn)識(shí)。它能做到的從零搭建項(xiàng)目腳手架快速生成可運(yùn)行的代碼框架CRUD類的業(yè)務(wù)代碼寫得很規(guī)整前后端聯(lián)調(diào)、字段對(duì)齊這種活兒比人仔細(xì)生成腳本、部署文檔、測試用例效率極高閱讀已有代碼做局部重構(gòu)效果不錯(cuò)它做不到的理解復(fù)雜的業(yè)務(wù)邏輯尤其是涉及大量隱性規(guī)則的業(yè)務(wù)設(shè)計(jì)系統(tǒng)架構(gòu)做技術(shù)選型它只會(huì)給出常見方案不會(huì)給出最優(yōu)方案保證代碼的安全性比如SQL注入、越權(quán)問題它不會(huì)主動(dòng)替你擋通過測試驗(yàn)證代碼質(zhì)量它相信你測過了比你自己還信所以在使用上我給自己定了幾條規(guī)矩凡是涉及錢、用戶數(shù)據(jù)、權(quán)限控制的核心代碼一定會(huì)親手review所有生成代碼必須真實(shí)跑一遍測試不能看起來沒問題就上線。5.2 如何讓Claude Code更懂你的需求寫提示詞這件事我踩了不少坑之后總結(jié)出了幾個(gè)關(guān)鍵點(diǎn)。首先需求描述越具體輸出質(zhì)量越高。你說幫我生成一個(gè)用戶模塊它只能給你一個(gè)最通用的模板。但你說幫我生成一個(gè)用戶管理模塊包含分頁列表、時(shí)間范圍篩選、批量刪除和狀態(tài)啟用禁用輸出的代碼匹配度立刻高一個(gè)臺(tái)階。其次用對(duì)比的方式告訴它要什么。比如參考xxx項(xiàng)目的寫法或者不要用xxx模式。因?yàn)锳I模型理解對(duì)比比理解抽象描述更容易。最后定期讓它梳理項(xiàng)目結(jié)構(gòu)。每過一段時(shí)間讓它生成一份當(dāng)前項(xiàng)目的README或者目錄說明這樣后續(xù)對(duì)話里它會(huì)有更清晰的上下文。5.3 關(guān)于AI編程我的真實(shí)看法我在這個(gè)行業(yè)干了十年經(jīng)歷過各種新技術(shù)從炒作到落地的過程。對(duì)Claude Code這類工具我的態(tài)度是別怕它但也別神化它。它能幫你做的是把那些你早就寫過無數(shù)遍的重復(fù)代碼、框架搭建、模板拼接工作全部接管。這對(duì)整個(gè)行業(yè)的生產(chǎn)力提升是實(shí)實(shí)在在的。但能寫好CRUD不等于能設(shè)計(jì)系統(tǒng)能寫代碼更不等于能定義問題。真正的價(jià)值創(chuàng)造還是在人對(duì)業(yè)務(wù)的理解、對(duì)技術(shù)方案的判斷以及對(duì)質(zhì)量的把控上。用Claude Code干活這半天我最大的收獲不是節(jié)省了兩天時(shí)間而是我把省下來的時(shí)間花在了更重要的事情上——琢磨這個(gè)項(xiàng)目的業(yè)務(wù)邏輯有沒有更優(yōu)的解法數(shù)據(jù)庫結(jié)構(gòu)有沒有更合理的規(guī)劃。這些才是程序員真正不可替代的部分。最后分享一個(gè)小技巧多用git做版本管理每次讓Claude Code做大改動(dòng)前先commit一次。有了這個(gè)保底動(dòng)作你就敢放開手腳讓它去造大不了回滾重來。這也是我在多次AI改壞了之后總結(jié)出來的血淚經(jīng)驗(yàn)希望對(duì)你有用。