react 執行 yarn build ,無法直接打開dist文件下的index


如果你使用create-react-app創建項目,執行命令 yarn build 后,直接以靜態方式打開build文件夾內的index.html,會看到頁面顯示出現問題,打開console后會看到js、css、svg等文件的路徑出現問題。

 

解釋:

在打包之前,在 package.json 中 private 下(位置任意)添加"homepage": "./"

這樣在你點擊index.html時候路徑沒有問題不會報錯,但是頁面可能還是空白的

然后將項目中的引用路由時候的BrowserRouter改為HashRouter,所有用到的地方都要改

然后執行yarn build 或者 npm run build

再點開index.html就不會報錯

原因:
​ 你必須把build里的文件直接放到應用服務器的根路徑下,比如,你的服務器IP是172.16.38.253,應用服務器端口為8080,你應該保證http://172.16.38.253:8080這種訪問方式,訪問到的是你的build下的文件。如果你希望以http://172.16.38.253:8080/build/index.htm這種方式訪問應用,那么你可以在package.json文件中增加一個homepage字段。

在服務器下運行和直接打開html文件有什么區別?
​ 最直接的區別,很容易注意到,一個是file協議,另一個是http協議。file協議更多的是將該請求視為一個本地資源訪問請求,和你使用資源管理器打開是一樣的,是純粹的請求本地文件。而http請求方式則是通過假架設一個web服務器,解析http協議的請求然后向瀏覽器返回資源信息。我們所開發的html文件最后必定是會以網頁的形式部署在服務器上,通過http協議訪問,所以我們開發中也盡可能模擬線上環境,架設本地服務器,來避免file協議與http協議實現過程中的某些差異性,如某些API的差異、跨域請求的差異等。舉個最容易驗證的例子:在頁面引入一張絕對路徑的圖片,即'/image/example.png',然后分別通過這兩種方式打開頁面,file協議會將資源請求到根路徑,而http協議雖然也會請求到根路徑,但是是相對本地架設的服務器的根路徑,一般也就是項目文件夾的路徑。

​ html是運行於客戶端的超文本語言,從安全性上來講,服務端不能對客戶端進行本地操作。即使有一些象cookie這類的本地操作,也是需要進行安全級別設置的。

參考

https://www.cnblogs.com/aurora-ql/p/14124341.html

 

 

解決方案:

  1、打包之前在package.json中,添加了 "homepage": "." 項、

  2、將全局 BrowserRouter 改為 HashRouter

 

 

但是,不建議解決,畢竟是要部署到服務器的,為了安全。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM