vue.js項(xiàng)目打包上線全流程
vue.js項(xiàng)目打包上線
最近一直堅(jiān)持每個月寫一個小的vue.js 開發(fā)的項(xiàng)目,最后開發(fā)完成后想到很久之前給別人回答的一個問題:vue的項(xiàng)目如何上線,當(dāng)時有千奇百怪的回答,我在想,這些人都是腫了么,vue的官方都說了,這個框架只是做了view這一層,所以并不是把這些開發(fā)完的東西直接拷貝到服務(wù)器上,而且需要打包為靜態(tài)文件上傳服務(wù)器的。
這里我簡單的列出這個過程
首先需要修改一下配置文件再打包,很多人都是遇到過打包后運(yùn)行一片空白等等問題,這些問題主要就是路徑的問題,所以需要修改config下面的index.js這個配置文件里選項(xiàng):

上圖中第一個要修改的就是靜態(tài)文件的路徑,打包后靜態(tài)文件就在當(dāng)前目錄下,所以修改為./
第二個是環(huán)境設(shè)置為生產(chǎn)環(huán)境
修改好后打開cmd運(yùn)行下面的命令打包即可:

注意下面的tip,告訴你這個打包后的文件需要放到服務(wù)器才能打開,不能直接使用瀏覽器打開,打包后的文件結(jié)構(gòu)如下:

這時我們需要使用服務(wù)器的方式來訪問index.html就可以了。這里可能很多人也會遇到一些問題,比如大家可能在開發(fā)的時候使用的proxytable來解決跨域的問題,這里就會沒有數(shù)據(jù)了,這個需要自己通過服務(wù)器在解決一下才可以的,proxytable在這里只是為了方便大家開發(fā)的跨域解決方案。
vue.js打包之后遇到的坑
最近在用webpack+vue寫項(xiàng)目,經(jīng)過幾天的熬夜加班改BUG,終于把基本的框架給寫完了,后面只要加一些小功能就可以了,太好吧!先來npm run build 打包出來看看吧!

打包中...,我們用本地服務(wù)器打開看一下。
額,不看不知道,一看嚇一跳,坑咋這么多呢!但是作為一名積極向上的IT從業(yè)者,填坑吧。
打包之后沒有被渲染出來

怎么回事,剛打開就告訴我啥也沒有,這是要搞事情的前奏啊!,我們看一下錯誤信息,告訴我路徑有問題,默默的看一下自己的地址欄和自己的文件所在目錄,原來是我的打包文件沒有放到根目錄下,這個時候我們可以把我們的兩個文件放到根目錄下,但是作為一名有個性的IT人士,當(dāng)然要看有沒有其他方法。從上面的路徑中隱隱約約有點(diǎn)預(yù)感,static是直接相對于根目錄,說明這有可能打包的時候,有可能設(shè)置了絕對路徑,如果我改成相對路徑,那不就可以了嗎。

我們?nèi)タ匆幌马?xiàng)目文件下的config>index.js找到里面的build下的assetsPublicPath:'/',把它改成assetsPublicPath:'./',加個小點(diǎn)表示相對路徑,不加表示絕對路徑。npm run build運(yùn)行。成功。
路由(router)mode:'history',導(dǎo)致頁面不能渲染

地址欄的那個#怎么那么讓我不舒服呢!對于有輕度強(qiáng)迫癥的我來說,這是不能忍不了的。
我們在項(xiàng)目打包前,開發(fā)項(xiàng)目時(npm start),在vueRouter里設(shè)置mode:"history".可以去掉#號。
這里強(qiáng)行解釋一番:
路由(router)默認(rèn) hash 模式,使用 URL 的 hash 來模擬一個完整的 URL,于是當(dāng) URL 改變時,頁面不會重新加載,因?yàn)閷τ谡5捻撁鎭碚f,更換URl一定是會導(dǎo)致頁面的更換的, 而只有更換URL中的查詢字符串和hash值的時候才不會重新加載頁面。
路由(router)的history模式,這種模式充分利用了history.pushState API來完成URL的跳轉(zhuǎn)而不需要重新加載頁面。沒有#號。
npm run build打包中....
什么鬼,為什么我的路由(router)部分沒有被渲染出來,這就是history的坑了,解決方法一,會到以前的hash模式;解決方法二,設(shè)置routes里的路由name。

這是因?yàn)槁酚桑╮outer)無法找到路徑中的組件,所以也就無法渲染了。只需要修改 src > router > index.js,在每個path后加上組件名稱就行了,這樣就可以了。
這里有個小問題:


為了我們的時間考慮,還是放到根目錄吧!
首頁沒有問題了,逐個鏈接測試一下。


這是什么鬼,路徑和其他圖片路徑一樣,圖片也存在啊,為啥你就是這么傲嬌,就是報(bào)錯。來看一下控制臺。

結(jié)合之前的./原來是相對路徑問題,是我的開發(fā)文件assets下多個圖片文件夾。

這個時候?yàn)榱碎_發(fā)項(xiàng)目的可讀性和維護(hù)性。只能默默的把前面改的相對路徑'./'改回絕對路徑'/'了。這就尷尬了,額額額,大家就當(dāng)沒看到哈!
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Flutter部件內(nèi)部狀態(tài)管理小結(jié)之實(shí)現(xiàn)Vue的v-model功能
本文是 Flutter 部件內(nèi)部狀態(tài)管理的小結(jié),從部件的基礎(chǔ)開始,到部件的狀態(tài)管理,并且在過程中實(shí)現(xiàn)一個類似 Vue 的 v-model 的功能,感興趣的朋友跟隨小編一起看看吧2019-06-06
Vue手機(jī)號正則匹配姓名加密展示功能的實(shí)現(xiàn)
這篇文章主要介紹了Vue手機(jī)號正則匹配,姓名加密展示,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
vue修改props數(shù)據(jù)報(bào)錯的問題及解決
這篇文章主要介紹了vue修改props數(shù)據(jù)報(bào)錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Vue清除定時器setInterval優(yōu)化方案分享
這篇文章主要介紹了Vue清除定時器setInterval優(yōu)化方案分享,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-07-07
詳解基于vue-router的動態(tài)權(quán)限控制實(shí)現(xiàn)方案
本篇文章主要介紹了詳解基于vue-router的動態(tài)權(quán)限實(shí)現(xiàn)方案,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
vue element-ui實(shí)現(xiàn)動態(tài)面包屑導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了vue element-ui實(shí)現(xiàn)動態(tài)面包屑導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12
elementui 開始結(jié)束時間可以選擇同一天不同時間段的實(shí)現(xiàn)代碼
這篇文章主要介紹了elementui 開始結(jié)束時間可以選擇同一天不同時間段的實(shí)現(xiàn)代碼,需要先在main.js中導(dǎo)入相應(yīng)代碼,代碼簡單易懂,需要的朋友可以參考下2024-02-02
ant design vue datepicker日期選擇器中文化操作
這篇文章主要介紹了ant design vue datepicker日期選擇器中文化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10

