欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

前端部署踩坑實(shí)戰(zhàn)記錄(部署后404、頁面空白)

 更新時(shí)間:2024年09月09日 09:35:08   作者:夜雨聲煩1024  
Vue項(xiàng)目打包部署Nginx服務(wù)器后,刷新頁面后出現(xiàn)404的問題,下面這篇文章主要給大家介紹了關(guān)于前端部署踩坑的實(shí)戰(zhàn)記錄,文中包括部署后404、頁面空白等問題的解決辦法,需要的朋友可以參考下

問題

廢話不多說,目的是將項(xiàng)目部署到xxx.com/app路徑下。

腳手架用的是vite,一開始什么都沒有配置,base(如果是vue.config.js則是對(duì)應(yīng)publicPath)是默認(rèn)的(根目錄),路由模式使用的是histroy,規(guī)則大致如下:

const routes = [
  { path: '/', component: () => import('@/views/Home.vue')},
  { path: '/About', component: () => import('@/views/About.vue')},
]

當(dāng)時(shí)我的理解是,部署的時(shí)候?qū)⒋虬蟮奈募旁?code>/app/目錄下,那么訪問xxx.com/app就能匹配到對(duì)應(yīng)的路由。

當(dāng)項(xiàng)目部署后,首先是出現(xiàn)兩個(gè)文件404問題,分別是@vite/client.js和main.js。

當(dāng)時(shí)在網(wǎng)上看到的解決方法是把base修改成’./',也就是相對(duì)路徑,修改完一部署,果然沒報(bào)404了,但是頁面一片空白,并且控制臺(tái)也沒有任何報(bào)錯(cuò)(這時(shí)候并不知道nginx的配置和資源在服務(wù)器存放的路徑)。

這就奇怪了,明明已經(jīng)加載了main.js部分的內(nèi)容,但卻沒有渲染出組件。然后就在同事的nginx上部署了一下,發(fā)現(xiàn)是可以正常訪問的,但他的情況是沒有加上子路徑的,一加上/app就不行了。其實(shí)這里就大致知道是nginx配置與前端打包配置沒有配合好的原因了。

解決方法

后面了解了nginx的配置,試了許多方案,終于配置好了:

nginx conf
server {
    # xxx其他配置

    listen       80;
    server_name  xxx.com;

    location /app {
      alias xxx/nginx-1.20.2/html/app/;
      try_files $uri $uri/ /app/index.html;
    }

    # xxx其他配置
}

vite.config.js
base: '/app'

routes
const routes = [
  { path: '/app/', component: () => import('@/views/Home.vue')},
  { path: '/app/About', component: () => import('@/views/About.vue')},
]

兩個(gè)頁面都能正常訪問,經(jīng)過測(cè)試發(fā)現(xiàn),base需要和location保持一致(后面發(fā)現(xiàn)不一定,base可以有多種寫法),而文件存放的路徑不是關(guān)鍵,即使修改也可以正常訪問到(文件需要放到對(duì)應(yīng)的目錄下):

nginx
server {
    listen       80;
    server_name  xxx.com;
    location /app {
      # 將前端打包文件放到dist目錄下
      alias xxx/nginx-1.20.2/html/dist/;
      try_files $uri $uri/ /dist/index.html;
    }
}

那么我最開始設(shè)置成的base為’./'時(shí),沒有渲染組件是什么情況呢?

nginx
server {
    listen       80;
    server_name  xxx.com;

    location /app {
      alias xxx/nginx-1.20.2/html/app/;
      try_files $uri $uri/ /app/index.html;
    }
}

vite.config.js
base: './'

routes
const routes = [
  { path: '/', component: () => import('@/views/Home.vue')},
  { path: '/About', component: () => import('@/views/About.vue')},
]

現(xiàn)在看來,確實(shí)是因?yàn)槁酚梢?guī)則不對(duì)導(dǎo)致的,如果路由規(guī)則修改為如下:

const routes = [
  { path: '/app', component: () => import('@/views/Home.vue')},
  { path: '/app/About', component: () => import('@/views/About.vue')},
]

則可以正常訪問,說明base不一定要與location一致,而是要保證路由前綴和location要匹配的上。

此外,看到有人說需要配置router中的base,會(huì)自動(dòng)為路由加上前綴,如下:

const routes = [
  { path: '/', component: () => import('@/views/Home.vue')},
  { path: '/About', component: () => import('@/views/About.vue')},
]

const router = createRouter({
  history: createWebHistory(),
  base: '/app',
  routes,
})

但我試了卻沒有生效,加與不加,訪問xxx.com/app都是空白頁面,且不報(bào)錯(cuò),說明就是沒有匹配到對(duì)應(yīng)的路由,可能還是我的寫法有問題?

其中如果你某些地方?jīng)]配置好還會(huì)出現(xiàn)訪問xxx.com/app正常,xxx.com/app/About出現(xiàn)404的問題,可以檢查下前端和nginx有沒有對(duì)應(yīng)配好。

總結(jié)

如果使用history模式,并且需要部署到子級(jí)目錄下,需要配置好以下內(nèi)容:

  • vite.config.js的base(vue.config.js對(duì)應(yīng)publicPath)可以有三種設(shè)置方式:相對(duì)路徑'./'、服務(wù)器存放資源的路徑、nginx配置文件location的路徑,設(shè)置有誤可能出現(xiàn)404。

  • nginx配置如下:

    server {
        listen       80;
        server_name  xxx.com;
    
        location /app {
          alias xxx/nginx-1.20.2/html/app/;
          try_files $uri $uri/ /app/index.html;
        }
    }
    

    alias就是匹配到location后去對(duì)應(yīng)路徑下找資源,try_files則是在url前綴包含location但卻沒有匹配的資源時(shí)會(huì)去使用的資源。

    例如這里location沒有配置/app/About,但是卻可以訪問到就是因?yàn)檫@條配置,如果刪掉則會(huì)出現(xiàn)404,這是因?yàn)閱雾撁鎽?yīng)用只有一個(gè)入口文件,所以可以這么做。

  • route規(guī)則中的路徑前綴需要與location一致。

這三點(diǎn)如果都沒錯(cuò)的話應(yīng)該就能正確部署了,推薦base、路由前綴、location三者統(tǒng)一,方便配置,也可以減少出錯(cuò)。另外,前端打包后的文件也推薦放到對(duì)應(yīng)級(jí)別的目錄中,如在本例子中,存放的位置為/xxx/nginx/html/app/。

其他

當(dāng)你base設(shè)置為資源的絕對(duì)路徑時(shí)(如/dist),如果你跑本地服務(wù)的話,可能會(huì)訪問不到資源,但是打包后部署上去是可以正常訪問的。

看到網(wǎng)上有人說使用base使用’./'會(huì)出現(xiàn)刷新404的情況,但我這邊沒有遇到,如果大家遇到可以說明一下情況,共同探討。

對(duì)于單頁面應(yīng)用,location路徑的最后可以不帶/。這樣的好處是,假如你想要部署的地址是xxx.com/app,那么你使用xxx.com/app或者xxx.com/app/都可以訪問到,這是因?yàn)榕渲昧藅ry_files,即使找不到,但是由于前綴匹配到了location,可以去尋找默認(rèn)的文件;

如果location最后攜帶了/,則xxx.com/app訪問不到。這是因?yàn)閘ocation最后加了/需要精確匹配到xxx.com/app/前綴才能訪問。
當(dāng)然這也要根據(jù)項(xiàng)目需求來決定如何配置。

最后,這是本人初次接觸nginx部署,如果有說的不對(duì)的地方歡迎指出,共同進(jìn)步。

到此這篇關(guān)于前端部署踩坑實(shí)戰(zhàn)記錄的文章就介紹到這了,更多相關(guān)前端部署后404、頁面空白內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vant實(shí)現(xiàn)購物車功能

    vant實(shí)現(xiàn)購物車功能

    這篇文章主要為大家詳細(xì)介紹了vant實(shí)現(xiàn)購物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • vue中動(dòng)態(tài)組件使用及傳值方式

    vue中動(dòng)態(tài)組件使用及傳值方式

    這篇文章主要介紹了vue中動(dòng)態(tài)組件使用及傳值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue Treeselect樹形下拉框的使用小結(jié)

    Vue Treeselect樹形下拉框的使用小結(jié)

    樹形下拉框是一個(gè)帶有下列樹形結(jié)構(gòu)的下拉框,本文主要介紹了Vue Treeselect樹形下拉框的使用小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • vue2.0+elementui實(shí)現(xiàn)一個(gè)上門取件時(shí)間組件

    vue2.0+elementui實(shí)現(xiàn)一個(gè)上門取件時(shí)間組件

    這篇文章主要給大家介紹了關(guān)于vue2.0+elementui實(shí)現(xiàn)一個(gè)上門取件時(shí)間組件的相關(guān)資料,用于預(yù)約上門服務(wù)時(shí)間 看到網(wǎng)上有很多亂七八糟的代碼,看著頭疼,于是自己寫了一個(gè)簡(jiǎn)單的,需要的朋友可以參考下
    2024-02-02
  • uniapp微信小程序webview和h5數(shù)據(jù)通信代碼示例

    uniapp微信小程序webview和h5數(shù)據(jù)通信代碼示例

    這篇文章主要介紹了uniapp微信小程序webview和h5數(shù)據(jù)通信的相關(guān)資料,文章還列出了項(xiàng)目的結(jié)構(gòu),包括微信小程序和h5端的主要文件和組件,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • vue-element-admin搭建后臺(tái)管理系統(tǒng)的實(shí)現(xiàn)步驟

    vue-element-admin搭建后臺(tái)管理系統(tǒng)的實(shí)現(xiàn)步驟

    本文主要介紹了vue-element-admin搭建后臺(tái)管理系統(tǒng)的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • vue3封裝Element導(dǎo)航菜單的實(shí)例代碼

    vue3封裝Element導(dǎo)航菜單的實(shí)例代碼

    這篇文章主要介紹了vue3封裝Element導(dǎo)航菜單的實(shí)例代碼,分為菜單數(shù)據(jù)格式示例,控制導(dǎo)航收縮的詳細(xì)代碼,本文通過實(shí)例代碼介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • vue elementui 實(shí)現(xiàn)搜索欄公共組件封裝的實(shí)例代碼

    vue elementui 實(shí)現(xiàn)搜索欄公共組件封裝的實(shí)例代碼

    這篇文章主要介紹了vue elementui 搜索欄公共組件封裝,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 詳解Vue調(diào)用手機(jī)相機(jī)和相冊(cè)以及上傳

    詳解Vue調(diào)用手機(jī)相機(jī)和相冊(cè)以及上傳

    這篇文章主要介紹了Vue調(diào)用手機(jī)相機(jī)及上傳,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue-cli 關(guān)閉熱更新操作

    vue-cli 關(guān)閉熱更新操作

    這篇文章主要介紹了vue-cli 關(guān)閉熱更新操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論