vue項(xiàng)目部署圖片路徑問(wèn)題

背景

使用vue-cli創(chuàng)建的項(xiàng)目,我將圖片保存在了static目錄下惊窖,開(kāi)發(fā)時(shí)沒(méi)有問(wèn)題刽宪,圖片都能顯示。但部署到線上時(shí)爬坑,發(fā)現(xiàn)有的圖片能顯示纠屋,有的圖片不能顯示。檢查了一下元素盾计,發(fā)現(xiàn)能顯示的圖片是因?yàn)榫幾g的時(shí)候轉(zhuǎn)化為了base64格式售担,而沒(méi)有轉(zhuǎn)化的(大于預(yù)定義的大辛抟拧)圖片由于引用路徑不對(duì),無(wú)法顯示族铆。網(wǎng)上查了很多vue項(xiàng)目中圖片引用相關(guān)的資料岩四,最后發(fā)現(xiàn)癥結(jié)處在于我將vue部署在了非項(xiàng)目根目錄,因此如果使用絕對(duì)路徑引用static目錄下的圖片時(shí)哥攘,會(huì)導(dǎo)致路徑不對(duì)剖煌。因此問(wèn)題就轉(zhuǎn)化為如何在非項(xiàng)目根目錄上部署vue項(xiàng)目。

解決方案

變量聲明

  1. 部署后的域名:http://example.com/
  2. nginx的項(xiàng)目root:根域名的項(xiàng)目地址逝淹,如 /mydir/rootproject
  3. vue網(wǎng)站目錄:/mydir/rootproject/myproject/
  4. vue網(wǎng)站訪問(wèn)地址: http://example.com/testH5
  5. vue網(wǎng)站主頁(yè)訪問(wèn)地址: http://example.com/testH5/index.html
  6. vue網(wǎng)站靜態(tài)文件目錄: http://example.com/myproject/static

解決步驟

step1: 修改打包后靜態(tài)資源的路徑

這里我們需要改成絕對(duì)路徑耕姊。

build: {
    ...
    assetsSubDirectory: 'static',
    assetsPublicPath: '/myproject/'  // 未修改前的配置為 '/',
}

這樣靜態(tài)文件目錄就始終在http://example.com/myproject/static/這個(gè)路徑了栅葡。

step2:修改路由文件

的history模式下茉兰,所有的路由都是基于根路徑的,如/xxxx欣簇,現(xiàn)在我們時(shí)部署到/testH5下规脸,我們就要基于這個(gè)來(lái)修改路由。
vue-router有一個(gè)base屬性 https://router.vuejs.org/zh/…

base
類型: string
默認(rèn)值: "/"
應(yīng)用的基路徑熊咽。例如莫鸭,如果整個(gè)單頁(yè)應(yīng)用服務(wù)在 /app/ 下,然后 base 就應(yīng)該設(shè)為 "/app/"

修改路由代碼

const router = new Router({
  mode: 'history',
  base: '/testH5', // 這是新加的配置
  ...
})

這樣打包部署時(shí)就可以了横殴,但是開(kāi)發(fā)環(huán)境下這個(gè)就不對(duì)了被因,所以我們還要根據(jù)環(huán)境修改一下文件。
config/prod.env.js生產(chǎn)環(huán)境變量

module.exports = {
  NODE_ENV: '"production"',
  ROUTER_BASE: '"/testH5"'
}

config/dev.env.js開(kāi)發(fā)環(huán)境變量

module.exports = {
  NODE_ENV: '"development"',
  ROUTER_BASE: '"/"'
}

路由代碼

const router = new Router({
  mode: 'history',
  base: process.env.ROUTER_BASE, // 這是新加的配置
  ...
})

至此衫仑,打包配置的相關(guān)修改已全部完成氏身,項(xiàng)目也能夠正常訪問(wèn)。

step3: 修改nginx配置

location ~ /testH5 {
    try_files $uri $uri/ /myproject/index.html;
}

/testH5就是部署的網(wǎng)站目錄惑畴。

step4: 修改圖片打包的路徑

step5: 引用圖片路徑使用相對(duì)路徑

圖片主要分為五種引用方式(均針對(duì)引用本地圖片,在線圖片直接寫具體的url地址航徙,不存在路徑問(wèn)題):
(a) 使用img
?1. 靜態(tài)img如贷,<img src="../../static/xxx" />在img標(biāo)簽中通過(guò)src直接寫靜態(tài)圖片的路徑
?2. 動(dòng)態(tài)img,<img :src="require('../../static/xxx')" />在img標(biāo)簽中v-bind:src(簡(jiǎn)寫為:src)寫圖片路徑到踏,由于動(dòng)態(tài)圖片不會(huì)在編譯時(shí)解析路徑杠袱,因此需要使用require的方式引用
(b)在css樣式中直接使用背景圖
?3. 使用靜態(tài)背景圖的時(shí)候,圖片資源是通過(guò)css加載的窝稿,如background: url("../../static/xxx.png")楣富,打包后變成了url("static/xxx.png"),因此要修改build文件夾下的utils.js代碼

if (options.extract) {
 return ExtractTextPlugin.extract({
   use:loaders,
   fallback: 'vue-style-loader',
   **publicPath: '../../',  ** // 新添加
 })
}
 &emsp;4. 使用動(dòng)態(tài)背景圖時(shí)(如通過(guò)條件判斷伴榔,active時(shí)用imgA纹蝴,否則用img)
    `<div class="bg" />`在.bg樣式的background屬性中使用 
    `url("require('../../static/xxx')")`的方式動(dòng)態(tài)引入靜態(tài)圖片

(c)通過(guò)vue的data加載圖片再使用
?5. 在vue的data里用require引用圖片 image_bg: require('../../static/xxx.png')
使用::style="{backgroundImage: 'url('+ image_bg + ')'}"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庄萎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子塘安,更是在濱河造成了極大的恐慌糠涛,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兼犯,死亡現(xiàn)場(chǎng)離奇詭異忍捡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)切黔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門砸脊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人纬霞,你說(shuō)我怎么就攤上這事凌埂。” “怎么了险领?”我有些...
    開(kāi)封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵侨舆,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我绢陌,道長(zhǎng)挨下,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任脐湾,我火速辦了婚禮臭笆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秤掌。我一直安慰自己愁铺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布闻鉴。 她就那樣靜靜地躺著茵乱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孟岛。 梳的紋絲不亂的頭發(fā)上瓶竭,一...
    開(kāi)封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音渠羞,去河邊找鬼斤贰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛次询,可吹牛的內(nèi)容都是我干的荧恍。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屯吊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼送巡!你這毒婦竟也來(lái)了摹菠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤授艰,失蹤者是張志新(化名)和其女友劉穎辨嗽,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體淮腾,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡糟需,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谷朝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洲押。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圆凰,靈堂內(nèi)的尸體忽然破棺而出杈帐,到底是詐尸還是另有隱情,我是刑警寧澤专钉,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布挑童,位于F島的核電站,受9級(jí)特大地震影響跃须,放射性物質(zhì)發(fā)生泄漏站叼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一菇民、第九天 我趴在偏房一處隱蔽的房頂上張望尽楔。 院中可真熱鬧,春花似錦第练、人聲如沸阔馋。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呕寝。三九已至,卻和暖如春婴梧,著一層夾襖步出監(jiān)牢的瞬間壁涎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工志秃, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嚼酝。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓浮还,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親闽巩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钧舌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容