dotNET跨平臺 今天 以下文章來源于halouha ,,作者俞正東 目前使用比較多的web容器有哪些:
前端基本都是node應用,,據我了解大體上分2種
我接觸下來大部分前端開發(fā)者的強項在于第一種,,即使要做SSR的也不會是很重量級的(比如操作db等,數據在緩存redis里面或者在配置文件里,,否則渲染就慢了) 前端基本都是node應用,,nginx為例子,linux服務器上安裝好nginx后
可能你覺得就這點 也不麻煩啊,,不就操作配置一次就好了么,。 但是你后面修改代碼后,重新上傳,,代碼有問題想要回滾,,git回滾或者手動代碼回滾,重新上傳,。 有很多重復性操作,,效率不高! 注意 以上我說的是脫離了公司的環(huán)境(CICD集成的發(fā)布系統)自己獨立部署會遇到一些麻煩問題 下面給大家介紹下我開源這個web容器:讓前端開發(fā)者可以自給自足速快速部署&回滾,讓開發(fā)者只專注于用前端技術實現業(yè)務,,一個開箱即用的開源web容器來鼠標點幾下就完成部署&回滾&還可以SSR 功能一覽:
00.Docker Quick Start拉取鏡像并且Run 一行命令完成web容器部署docker run -d -v $(pwd)/spa/wwwroot:/publish/wwwroot -v $(pwd)/spa/backup:/publish/backup -e BasicAuth_Name=’admin’ -e BasicAuth_Pwd=’admin’ -e AllowedFileExtentionMapping=’’ -e NotAllowedFileExtentions=’’ -e BackUpLimit=’1’ —restart=always -p 80:5000 —name spa nainaigu/spa:20200915222842 參數說明
剩余的就打開瀏覽器訪問spa管理后臺 點擊即可http://xxx/admin 02.單頁面應用規(guī)范系統跑起來之后,,我們的前端容器就已經搞定了。前端開發(fā)者就可以自己動手部署了,! 什么是單頁面應用呢,?
例如下面的例子: 在index.html里面的css和js的引用需要注意的點得是 ./開頭的方式引用,否則發(fā)布上去會找不到(用./方式的話本地調試直接訪問和部署上去訪問都會是沒問題的)使用vue cli創(chuàng)建的項目設置 如上圖目錄結構中 1 修改vue.config.js中配置
2 修改.env文件配置 PUBLIC_PATH = ././ 3 修改.env.development 文件配置 PUBLIC_PATH = . 如果你不設置.env文件的話,,而是分別設置.env.development 和 .env.production 的話 那么 .env.production也得設置為 PUBLIC_PATH = ././ 對于非vue 用webpack的話對 webpack的配置文件 進行如下設置那么生成的index.html就會自動加上前綴./了
使用vue-router等前端路由是支持的03.單頁面應用部署,回滾下面我們開發(fā)一個最簡單單頁應用 有2個文件
然后我打包成 detai.zip 文件 進入系統 新建一個單頁面應用
不用在url上特地帶上index.html去訪問,,意思是 http://localhost:5000/detail 等于 訪問了 http://localhost:5000/detail/index.html 接下來我要修改index.html 然后重新部署 重新打包zip 然后 重新訪問 http://localhost:5000/detail 進行確認是否修改成功 如下圖 大家應該注意到了,前端有改動 只要重新上傳立刻生效,! 如果發(fā)布之后發(fā)布改錯了咋辦,,當然是立刻回滾到上一次的上傳版本! 如下圖 回滾功能: 重新訪問 http://localhost:5000/detail 進行確認是否回滾成功 如下圖 04.單頁面應用做SSR什么是SSR通俗來講就是用js來寫服務端代碼,在頁面渲染的時候通過js服務端代碼邏輯就可以把數據可以直接展示在頁面中! 首先得理解下面兩點
什么是服務端渲染,?下面是我的理解我寫了一個網頁,,部署到web容器后,我打開瀏覽器請求,,服務端收到請求后 先在服務端讀取我的網頁的內容,,然后結合 后端代碼+模板引擎的方式重新渲染再 返回給瀏覽器展示 什么場景下需要用到服務端渲染?下面是我的理解當你的頁面的標題,,Description 等meta信息 需要動態(tài)指定的時候,。 產品分享頁面: productId=1 productName = “產品A” 需要Title要指定為 “產品A” productId=2 productName = “產品B” 需要Title要指定為 “產品B” 要滿足這個需求 僅僅靠前端是沒有辦法完成的。因為你頁面在頁面ready后再去調用ajax方法是沒有辦法動態(tài)指定Title的,。這點可以大家實驗實驗,! 解決方案:服務端代碼+模板引擎 本系統最大的亮點來了:模板引擎約定好,前端自己就能搞定服務端js代碼是用上面的 產品分享頁面 為例: 如下圖,,進入單應用的SSR腳本編輯功能 默認 腳本編輯器里面會 寫好代碼模板,, 如下:
當提交保存 腳本代碼后,訪問 我們用 log 組件進行打日志記錄下: 查看日志: 業(yè)務代碼
注意:上面我把main方法改造了 返回了 一個 對象
腳本代碼智能提示 模板引擎其實很簡單: SSR腳本返回了什么對象 在html中用 @Model.xxxx 的形式使用!,!簡單吧?。∪缦聢D: 邏輯和上面的SSR腳本一致,! 如上我們用SSR腳本代碼的業(yè)務邏輯 + 模板引擎 解決服務端渲染,!上面的腳本代碼我們用了log組件=》方便的把腳本的執(zhí)行過程中記錄日志, 服務端腳本的擴展組件介紹服務端js腳本組件,會js就能寫后端邏輯本系統預制了 log組件 redis組件 db組件 http組件,,如果還有其他需要也可以自行擴展 前面我們介紹了log組件,。
log組件在腳本編輯器編寫代碼會有智能提示,如下圖
日志采用了開源的LogDashbord 中間件解析Nlog的日志文件 redis組件在腳本編輯器編寫代碼會有智能提示,,如下圖 前提:如上文中已提到,,要在appsettings.json里面配置redisconnection連接字符串
一般做服務端渲染的腳本里面講究的是執(zhí)行快,不然服務端代碼執(zhí)行很慢,,很嚴重影響用戶體驗,! 是用上面的 產品分享頁面 為例:事先根據productId把product的對象記錄在redis里面! db組件前提:如上文中已提到,,要在appsettings.json里面配置db的連接字符串 在腳本編輯器編寫代碼會有智能提示,,如下圖
是用上面的 產品分享頁面 為例:假如db里面 有一個product表 腳本可以這么寫: 我在實際業(yè)務中還這么用過: 先從redis里面取,,如果redis沒有我就從db里面取了放進redis!這樣就比較靈活,,而且效率也很高?。?/p> http組件全局配置功能全局配置提供一個json編輯器,,配置的json信息,,可以直接在html 用 @Model.Env.XXX 的方式使用 例如:我上面配置了一個 test :“111” 總結
所有代碼已托管在github:https://github.com/yuzd/Spa |
|