最近Vue3剛熱騰騰的出爐,官方表示對Typescript的支持變得更好
另外還多了Composition API,Teleports,Provide Inject...相當多好用的東西
因此就想好好的開箱一下
這時開啟Visual Studio發現,.net core其實預設的scaffolding就有支援....
Angular + .Net Core SPA
,React + .Net Core SPA
疑!?
沒有Vue + .Net Core SPA
???
他們開發團隊是感情不好嗎 (°ζ‿° )?
看來...,只好自己來土砲一下了
其實現在的前端框架,Vue/Angular/React,若用官方的cli去建立專案的話
基本上算是大同小異,畢竟都是webpack單一進入點的機制在跑
因此我的想法很簡單,就是拿React + .Net Core SPA
的scaffolding來改
稍微檢視一下預設的scaffolding,他大致上幫我們做了幾件事
開發環境幫你同時開好了前後端的server,所以你只要啟動一次debug,就能快速開始檢查開發的狀況
建置的流程幫你整合了npm的只能,所以有用CI/CD的機制的話,只要從版控把source code抓下來
其實他就會幫你把 node_modules 下載好,進行build,並把build後的靜態檔連同後端一起打包起來
對於快速開發一個前後端分離的網站來說,其實是相當的便利,不需要做太多事情就可以完成初步的開發
由於前後端分離,在開發環境下
其實最重要的,就是前端request要能夠打到後端
以及建置時,整合npm指令,做前後端整體的打包
以下是改造的細節
移除ClientApp中react的部分
建立Vue project
vue create app
選擇客製化選項
這邊我選擇以下功能
細部的選項
選好後,就是考驗網路流量的時刻了,開始下載 node_modules 的東西吧!
完成後就能看到類似的畫面了
接著把app裏的東西丟到ClientApp中
再來為了測試前後端串接的部分,就使用axios
來幫我們處理restful request的處理吧
npm install -D axios
再來新增一個頁面,用來測試向後端request,並做對應的code調整
調整的內容請參考github 上的 git history
nuget 安裝 VueCliMiddleware
使用 VueCliMiddleware 主要是有時會希望按下 F5
debug時,可以順便把 vue 的 server 起起來
並起由他來幫我們處理 request 的行為(要記得先準備好node_modules,不然會啟動失敗)
增加一個"IsLaunchSPAServer": true
來控制按F5
開始debug時,要不要順便啟動vue的server
也就是每次debug都幫你下 npm serve
更新Startup.cs
這邊就要實際實作按下 F5
可以順便啟動 vue 的 server
主要參考 VueCliMiddleware官方文件 進行改造
後端開放CORS
其實當project變大的時候,每次debug都要重啟vue server是有點花時間的
因此前後端的server分開啟動也是個做法
但分開啟動後,前端發request到後端會遇到 CORS
的問題
因此,後端在開發環境開放CORS
應該是最快的解法
這樣,就不需要每次debug都要重複啟動 vue server 了
修改 .csproj
檔案
有些專案部署可能會採CI/CD的方式
那就會需要把前端的建置流程也整合進整個部署流程
此外也需要讓visual studio知道vue build完後的靜態檔在哪
檢視開發環境
都調整完後就可以來嘗試一下開發環境了!
嘗試向後端發 request
其實營運部署的方式可以有很多種,而這邊使用最快最簡單的方式部署
但此方式可能會比較不適合流量大的系統
資料夾deploy
從 deploy 的 log 中可以看到 npm build 的 log
這樣就可以安心的使用 CI/CD 了
(btw,有的公司資安比較嚴謹,可能會遇到其他的網路因素)
建立IIS站台
實體路徑記得選有web.config
的地方,這邊是選
C:\Users\JC\Desktop\DEMO\Vue3DonetCore3SPATemplate\Vue3DonetCore3SPATemplate\bin\Release\netcoreapp3.1\publish
設定Port 8001
來作為測試用的網址
處理權限
如果出現 500.19
,有高機率是權限問題
解法大致為兩個方向:
這邊使用更改application pool identity的方式
(設定完後要記得 recycle ,異動才會生效)
檢視成果
這樣就能在瀏覽器上看到 IIS
回傳的網頁了!
其實 Vue3 目前來說真的就是剛出爐,使用狀況可能還是要觀察一下
可能還不適合太早上營運環境
但以嘗試來說,這次新增的許多新功能真的是很實用
比較意外的是,沒想到 .net core 預設的 scaffolding 居然沒有 Vue...,這真的是很意外
但還好整體改起來還不算太困難,恩,Vue + Typescript + .Net Core SPA
真香