react項目部署到子目錄下踩坑經(jīng)過

前端項目基于create-react-app搭建,后端代理用nginx。

需求

將多個前端項目部署在同一個域名下的不同路徑下。例如:a項目部署在http://myapp.com/a,b項目部署在http://myapp.com/b。

遇到的問題:

1、控制臺報錯Uncaught SyntaxError: Unexpected token <

原因:js文件返回錯誤。
打開控制臺查看js文件返回內(nèi)容,發(fā)現(xiàn)格式為text/html,內(nèi)容是index.html頁面。這是因為js請求路徑不對,導(dǎo)致nginx把js文件請求也重定向到返回index.html。
由于之前的項目都是部署在根路徑下,js文件的請求自然是去根路徑下尋找,但是現(xiàn)在項目部署到了子目錄,所以前端的資源路徑也應(yīng)該做調(diào)整,這里需要修改webpack的publicPath的值,我們開發(fā)環(huán)境下這個值默認(rèn)為"/",生產(chǎn)環(huán)境下這個值會使用package.json中的homepage字段的值,如果沒有homepage字段,則默認(rèn)為"/"。這里我們在package.json里添加"homepage": "/a"(假設(shè)我們需要部署到/a子目錄下)。

2、圖片資源404

圖片資源使用場景:
(1)、js文件內(nèi)img標(biāo)簽
(2)、css背景圖

第一種圖片使用場景

由于之前沒有考慮部署到子目錄,所以圖片路徑都寫成了絕對路徑,例如:<img src="/imgs/xx.png" />,這些圖片都存放在public目錄下的imgs文件夾內(nèi)。webpack打包時會把public內(nèi)的文件全部復(fù)制一份到打包后的目錄內(nèi),所以在本地開發(fā)和部署到根路徑下的時候,這樣訪問圖片是可以的,但是當(dāng)項目部署在子路徑下時(例如:/a子路徑),這時候打包的文件都在/a目錄下,根路徑下是不存在imgs這個文件夾的。修改為:import xx from "@/imgs/xx.png"(這里的@是在webpack配置里添加的別名,用來代替"src目錄"),這里需要把public/imgs內(nèi)你用到的圖片資源拷貝到src/imgs這個目錄下。這樣webpack打包時就會正確解析出圖片的引用路徑。

第二種圖片使用場景

css背景圖的圖片url屬性,之前也是寫的根路徑:"/imgs/xx.png",這樣寫webpack在打包時候不會去解析圖片路徑,直接原樣打包。修改為相對路徑后解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 寫在開頭 先說說為什么要寫這篇文章, 最初的原因是組里的小朋友們看了webpack文檔后, 表情都是這樣的: (摘...
    Lefter閱讀 5,442評論 4 31
  • 在現(xiàn)在的前端開發(fā)中,前后端分離、模塊化開發(fā)、版本控制、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開始...
    Charlot閱讀 5,659評論 1 32
  • 目錄第1章 webpack簡介 11.1 webpack是什么? 11.2 官網(wǎng)地址 21.3 為什么使用 web...
    lemonzoey閱讀 1,828評論 0 1
  • 1. 新建一個文件夾,命名為 webpack-cli , webpack-cli 就是你的項目名,項目名建議使用小...
    魯大師666閱讀 1,650評論 1 3
  • ——“其實是因為老師要我寫,才真的開始寫系列” 開頭開個小玩笑,雖然也是大實話。 不會寫每天日記,打算以2-4天一...
    霖子邪閱讀 187評論 0 0

友情鏈接更多精彩內(nèi)容