日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hello Blazor:(6)你必须踩过这5个坑,才算学会部署Blazor WebAssembly到静态网站

發布時間:2023/12/4 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hello Blazor:(6)你必须踩过这5个坑,才算学会部署Blazor WebAssembly到静态网站 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上次的文章中,我們介紹了Blazor WebAssembly可以部署到靜態文件服務器,而每個Github賬戶都可以使用GitHub Pages功能開一個自己的靜態網站。

那么,不用花錢購買服務器,就可以將Blazor WebAssembly項目部署到GitHub Pages作為demo展示。

但是,你首先要踩過5個坑!

1.部署

可能有不熟悉部署流程的朋友,如果你了解,可以直接跳到第2部分。

1.1創建Github Pages

登錄Github后,創建一個倉庫,比如HelloBlazor。

訪問https://github.com/用戶名/倉庫名/settings/pages,為Source選擇main分支并保存。

1.2生成發布文件

在Blazor wasm項目上點右鍵,選擇“發布”,目標選擇“文件夾”。

點擊“發布”按鈕,將項目發布到本地目錄bin\Release\net5.0\browser-wasm\publish\。

1.3上傳網站

clone倉庫到本地。由于可能要上傳多個項目,所以每個項目建一個子文件夾。

創建Demo目錄,將bin\Release\net5.0\browser-wasm\publish\wwwroot下的所有文件復制到Demo目錄下。

推送本地文件到遠程倉庫。

1.4訪問網站

使用https://用戶名.github.io/HelloBlazor/Demo/即可訪問網站。

你以為結束了?

不,下面才正式開始!

2.踩坑

2.1 所有資源文件404

現象

訪問網站,提示An unhandled error has occurred.,使用瀏覽器開發者工具,發現所有資源文件無法訪問,返回404錯誤:

解決

修改index.html:

<base?href="/"?/>

改成

<base?href="/HelloBlazor/Demo/"?/>

原理

默認是發布到網站根目錄,需要指定成部署的根目錄。

2.2 blazor.webassembly.js 404

現象

除了blazor.webassembly.js還是返回404錯誤,其他資源文件都能正常訪問:

解決

在倉庫根目錄下添加一個空文件.nojekyll。

原理

GitHub Pages默認基于Jekyll生成靜態頁面。而Jekyll將帶有下劃線的文件和目錄認為是特殊資源,不予處理。

而blazor.webassembly.js位于帶有下劃線的_framework目錄下,.nojekyll文件就是告訴GitHub不要忽略掉下劃線開頭的文件和文件夾。

2.3 Failed to find a valid digest in the 'integrity' attribute for resource

現象

已經沒有404錯誤了,但是console窗口卻有如下錯誤提示:?

解決

在倉庫根目錄下添加一個.gitattributes文件,內容如下:

*?binary

刪除Demo目錄下所有文件,重新生成發布上傳。

原理

當Blazor WebAssembly下載應用的啟動文件時,會檢查文件的SHA-256哈希值,確保不會出現加載不一致文件的風險。

但是,git在windows下會自動將文件中的換行符CRLF轉成LF,這樣就造成文件的哈希值變化。

.gitattributes文件就是告訴git當前都是二進制文件,不要處理。普通代碼倉庫慎用此配置

2.4 刷新頁面后404

現象

現在,網站可以正常訪問了。

但是當點擊其他菜單后,刷新頁面則會顯示404頁面:?

解決

在倉庫根目錄下添加一個文件404.html,文件內容如下:

<!DOCTYPE?html> <html><head><meta?charset="utf-8"><script?type="text/javascript">var?segmentCount?=?2;var?l?=?window.location;l.replace(l.protocol?+?'//'?+?l.hostname?+?(l.port???':'?+?l.port?:?'')?+l.pathname.split('/').slice(0,?1?+?segmentCount).join('/')?+?'/?p=/'?+l.pathname.slice(1).split('/').slice(segmentCount).join('/').replace(/&/g,?'~and~')?+(l.search???'&q='?+?l.search.slice(1).replace(/&/g,?'~and~')?:?'')?+l.hash);</script></head><body></body> </html>

修改index.html,在<head>節下增加如下代碼:

<script>(function?(l)?{if?(l.search)?{var?q?=?{};l.search.slice(1).split('&').forEach(function?(v)?{var?a?=?v.split('=');q[a[0]]?=?a.slice(1).join('=').replace(/~and~/g,?'&');});if?(q.p?!==?undefined)?{window.history.replaceState(null,?null,l.pathname.slice(0,?-1)?+?(q.p?||?'')?+(q.q???('?'?+?q.q)?:?'')?+l.hash);}}}(window.location)) </script>

原理

/counter實際是前端路由地址,網站無法找到對應目錄下的index.html文件,因此跳轉到404頁面。

而通過自定義404頁面,可以檢查當前URL,截取出網站根目錄地址。

注意,這里我們設置了segmentCount = 2,因為對應站點有2級子目錄。

路由將作為p參數的值,替換window.location跳轉回網站首頁。

index.html檢查當前URL,如果包含p參數,則把p參數的值轉換回路由地址。

2.5 開發環境所有資源文件404

現象

這回,網站終于真的可以正常訪問了。

但是在開發環境調試時,所有資源文件返回404錯誤:

解決

修改index.html,在<head>節下增加如下代碼:

<script>var?base?=?document.getElementsByTagName('base')[0];if?(window.location.hostname=='localhost')?{base.setAttribute('href',?'/');}? </script>

原理

因為我們為了部署,改了根地址:

<base?href="/HelloBlazor/Demo/"?/>

但是,調試環境又是基于網站根目錄。

所以需要動態把它設置回來。

結論

人,總在不斷踩坑中成長。

希望這篇文章,能幫助你避開一些坑,在成長的路上走得更快更遠!

如果你覺得這篇文章對你有所啟發,請關注我的個人公眾號”My IO“,記住我!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的Hello Blazor:(6)你必须踩过这5个坑,才算学会部署Blazor WebAssembly到静态网站的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。