用React、React-Router、Antd、React-Redux 技術棧做了一個SPA應用,Redux存儲應用的狀態,一按F5 美好的世界瞬間坍塌,本着新技術不能影響用戶體驗的原則,一頓操作。從React-Router中 path 對應的 component入手,component需要什么數據去后端請求什么數據。雖然請求冗余了點,但坍塌的世界又美好了起來。自測完成后npm run build 一下,包打出來了,丟到nginx上一試到處報錯,好多404。從此開始我的單頁面應用的采坑記錄。。。
前置環境:create-react-app 創建的工程,React-Router 用的是 browserHistory
404 靜態資源找不到問題
nginx的匹配規則設置如下:
默認情況下,這個構建好的靜態資源static 文件夾放到nginx 的html 文件夾下也是可以請求到資源的,但是每次都拷貝來拷貝去太麻煩了。偷個懶吧,把這個改成“./”
又發布了一版,嘿嘿可以了。頁面顯示正常
按下F5, 熟悉的 Nginx的404 頁面跳出來了。到開發環境試試沒問題啊,斷定是Nginx匹配規則的問題。開始百度rewrite的匹配規則怎么寫,nginx -s reload 重啟測試的要吐了,還是搞不定。
最后找到關鍵詞 try_files,但好多人都是如下:
放到我的測試環境還是不行。各種搗鼓: 最后寫成如下這樣,我按F5,看到了希望。
頁面的靜態資源是我們剛才設置的“./”這種寫法,有些路由還是報錯: Uncaught SyntaxError: Unexpected token <,但是沒出現 Nginx 404,看到一點點希望,繼續找度娘,有帖子說要不要用相對路徑用絕對路徑,看控制台一直提示:
把原來的“./”,恢復原狀,在package.json中加一個吧。把工程名作為value值。
再一頓操作。居然可以了。所有刷新測試了一遍,可以啦。O(∩_∩)O哈哈~
先記錄一下,總結:稍后完善