最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue項(xiàng)目打包部署總結(jié)篇

 更新時間:2024年08月07日 09:02:07   作者:前端歐陽  
這篇文章主要介紹了Vue項(xiàng)目打包部署總結(jié)篇,關(guān)于Vue項(xiàng)目發(fā)布的相關(guān)問題就先總結(jié)這么多,幾乎在每一步都踩過坑才有所體會,有問題歡迎各位同學(xué)一起探討,需要的朋友可以參考下

Vue項(xiàng)目打包部署總結(jié)

“scripts”: {
“build”: “vue-cli-service build”,
“push”: “yarn build && scp -r dist/* root@117.78.4.26:/www”
},

這樣就可以直接執(zhí)行yarn push 或者npm run push直接發(fā)布了。不過還有一個小問題,就是命令執(zhí)行的時候要求輸入遠(yuǎn)程服務(wù)器的root密碼(這里使用root來連接遠(yuǎn)程的,你可以用別的用戶,畢竟root用戶權(quán)限太高了)。

為了避免每次執(zhí)行都要輸入root密碼,我們可以將本機(jī)的ssh同步到遠(yuǎn)程服務(wù)器的authorized_keys文件中。

 同步ssh key

生成ssh key:使用git bash或者powershell執(zhí)行ssh-keygen可以生成ssh key。會詢問生成的key存放地址,直接回車就行,如果已經(jīng)存在,則會詢問是否覆蓋:

同步ssh key到遠(yuǎn)程服務(wù)器,使用ssh-copy-id指令同步

ssh-copy-id -i ~/.ssh/id_rsa.pub root@117.78.4.26

輸入密碼后,之后再次同步就不需要輸入密碼了。其實(shí)ssh_key是同步到了服務(wù)器(此處是root用戶家目錄)~/.ssh/authorized_keys文件里:

當(dāng)然你也可以手動復(fù)制本地/.ssh/id_rsa.pub(注意是pub結(jié)尾的公鑰)文件內(nèi)容**追加**到服務(wù)器/.ssh/authorized_keys的后面(從命名可以看出該文件可以存儲多個ssh key)

注意:這里全程使用的是root用戶,所以沒有文件操作權(quán)限問題。如果你的文件夾創(chuàng)建用戶不是遠(yuǎn)程登錄用戶,或許會存在同步文件失敗的問題,此時需要遠(yuǎn)程服務(wù)器修改文件夾的讀寫權(quán)限(命令 chmod)。

創(chuàng)建了一個測試項(xiàng)目(點(diǎn)擊本鏈接可以在gihub查看)[1]試一下,打包、文件上傳一句指令搞定啦:

Vue項(xiàng)目打包發(fā)布問題匯總

訪問一下,果然看到了我們熟悉的界面:

Vue項(xiàng)目打包發(fā)布問題匯總

至此,常規(guī)情況下發(fā)布Vue項(xiàng)目就介紹完了,接下來介紹非域名根路徑下發(fā)布以及history路由模式發(fā)布方法。

非域名根路徑發(fā)布

有時候同一臺服務(wù)器同一端口下可能會根據(jù)目錄劃分出多個不同的項(xiàng)目,比如我們希望項(xiàng)目部署到http://a.com/test下,這樣訪問http://a.com/test訪問到的是項(xiàng)目的首頁,而非test前綴的地址會訪問到其它項(xiàng)目。此時需要修改nginx配置以及Vue打包配置。

1. nginx配置

只需要添加一條location規(guī)則,分配訪問路徑和指定訪問文件夾。我們可以把/test指向之前創(chuàng)建的/www文件夾,這里因?yàn)槲募A名稱和訪問路徑不一致,需要用到alias這個配置:

Vue項(xiàng)目打包發(fā)布問題匯總

如果文件夾名稱與訪問路徑一致都為test,那這里可以用root來配置:

Vue項(xiàng)目打包發(fā)布問題匯總

這里要將/test配置放到/之前,意味著在路由進(jìn)入的時候,會優(yōu)先匹配/test。如果根路徑/下的項(xiàng)目有子路由/test,那http://xxxx/test只會訪問到/www里的項(xiàng)目,而不會訪問該子路由。

2. 項(xiàng)目配置

為了解決打包后資源路徑不對的問題,需要在vue.config.js中配置publicPath,這里有兩種配置方式,分別將publicPath配置為./和/test:

Vue項(xiàng)目打包發(fā)布問題匯總

更新nginx配置,發(fā)布后即可正常訪問啦。這里的兩種配置方式是有區(qū)別的,接下來會看一下它們的區(qū)別。如果不進(jìn)行項(xiàng)目配置,直接發(fā)布訪問會出現(xiàn)JS、CSS等資源找不到導(dǎo)致頁面空白的問題:

Vue項(xiàng)目打包發(fā)布問題匯總

該問題原因是資源引用路徑不對,頁面審查元素可以看到,頁面引用的js都是從根路徑下引用的:

Vue項(xiàng)目打包發(fā)布問題匯總

查看打包后的文件結(jié)構(gòu),可以看到j(luò)s/css/img/static等資源文件是與index.html處于同級別的:

Vue項(xiàng)目打包發(fā)布問題匯總

對于兩種配置方式,看看都是怎么生效的:

publicPath配置為./, 打包后資源引用路徑為相對路徑:

publicPath配置為/test,打包后資源相對路徑為從域名根目錄開始的絕對路徑:

兩種配置都可以正確地找到JS、CSS等資源。不過還有個問題,那就是static中的靜態(tài)資源依舊會找不到。

3. 絕對路徑引用的靜態(tài)資源找不到的問題

因?yàn)樵诖虬^程中,public下的靜態(tài)資源都不會被webpack處理,我們需要通過絕對路徑來引用它們。當(dāng)項(xiàng)目部署到非域名根路徑上時,這點(diǎn)非常頭疼,你需要在每個引用的URL前面加上process.env.BASE_URL(該值即對應(yīng)上文配置的publicPath),以使得資源能被正常訪問到。我們可以在main.js把這個變量值綁定到Vue.prototype,這樣每個Vue組件都可以使用它:

Vue.prototype.$pb = process.env.BASE_URL

在模板中使用:

然而,更加頭疼并且沒有良好解決方案的問題是在組件style部分使用public文件夾下的靜態(tài)資源:

如果需要使用圖片等作為背景圖片等,盡量使用內(nèi)聯(lián)方式使用吧,像在模板中使用一樣。

如果需要引入樣式文件,則在index.html中使用插值方式引入吧。

關(guān)于靜態(tài)資源的問題,vue-cli的推薦是盡量**將資源作為你的模塊依賴圖的一部分導(dǎo)入(即放到assets中,使用相對路徑引用),**避免該問題的同時也帶來其它好處:

history模式部署

默認(rèn)情況下,Vue項(xiàng)目使用的是hash路由模式,就是URL中會包含一個#號的這種形式。#號以及之后的內(nèi)容是路由地址的hash部分。正常情況下,當(dāng)瀏覽器地址欄地址改變,瀏覽器會重新加載頁面,而如果是hash部分修改的話,則不會,這就是前端路由的原理,允許根據(jù)不同的路由頁面局部更新而不刷新整個頁面。H5新增了history的pushState接口,也允許前端操作改變路由地址但是不觸發(fā)頁面刷新,history模式即利用這一接口來實(shí)現(xiàn)。因此使用history模式可以去掉路由中的#號。

1. 項(xiàng)目配置

在vue-router路由選項(xiàng)中配置mode選項(xiàng)和base選項(xiàng),mode配置為’history’;如果部署到非域名根目錄,還需要配置base選項(xiàng)為前文配置的publicPath值(注意:此情況下,publicPath必須使用絕對路徑/test的配置形式,而不能用相對路徑./)

Vue項(xiàng)目打包發(fā)布問題匯總

2. nginx配置

對于history模式,假設(shè)項(xiàng)目部署到域名下的/test目錄,訪問http://xxx/test/about的時候,服務(wù)器會去找/test指向的目錄下的about子目錄或文件,很顯然因?yàn)槭菃雾撁鎽?yīng)用,并不會存在a這個目錄或者文件,就會導(dǎo)致404錯誤:

Vue項(xiàng)目部署后頁面找不到

我們要配置nginx讓這種情況下,服務(wù)器能夠返回單頁應(yīng)用的index.html,然后剩下的路由解析的事情就交給前端來完成即可。

history模式nginx配置

這句配置的意思就是,拿到一個地址,先根據(jù)地址嘗試找對應(yīng)文件,找不到再試探地址對應(yīng)的文件夾,再找不到就返回/test/index.html。再次打開剛才的about地址,刷新頁面也不會404啦:

Vue項(xiàng)目打包發(fā)布問題匯總

3. history模式部署到非域名根路徑下

非域名根目錄下部署,首先肯定要配置publicPath。需要注意的點(diǎn)前面其實(shí)已經(jīng)提過了,就是這種情況下不能使用相對路徑./或者空串配置publicPath。為什么呢?原因是它會導(dǎo)致router-link等的表現(xiàn)錯亂,使用測試項(xiàng)目[2]分別使用兩種配置打包發(fā)布,審查元素就能看出區(qū)別。在頁面上有兩個router-link,Home和About:

Vue項(xiàng)目打包發(fā)布問題匯總

兩種配置打包后的結(jié)果如下。

publicPath配置為./或者空串:

publicPath配置為/test:

publicPath配置為相對路徑的router-link打包后地址變成了相對根域名下地址,很明顯是錯誤的,所以非域名根路徑部署應(yīng)該將publicPath配置為完整的前綴路徑。

結(jié)語

關(guān)于Vue項(xiàng)目發(fā)布的相關(guān)問題就先總結(jié)這么多,幾乎在每一步都踩過坑才有所體會,有問題歡迎各位同學(xué)一起探討。寫博客很累,不過收獲也很多,還是要堅(jiān)持;有時候別人轉(zhuǎn)載自己的原創(chuàng)文章也不標(biāo)明出處,竟然將寫文章日期改得比原創(chuàng)還早,有點(diǎn)心累。本文中使用到的圖片都加了個自己的水印,是前端實(shí)現(xiàn)的,原理也很簡單,之后寫一篇簡短的文章分享一下。

參考資料

[1]

Vue項(xiàng)目打包發(fā)布: https://github.com/Lushenggang/vue-publish-test

[2]

Vue項(xiàng)目打包部署測試項(xiàng)目地址: https://github.com/Lushenggang/vue-publish-test

到此這篇關(guān)于vue3中如何動態(tài)加載遠(yuǎn)程組件的文章就介紹到這了,更多相關(guān)vue3加載遠(yuǎn)程組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解Vue的過度與動畫

    深入理解Vue的過度與動畫

    這篇文章主要為大家介紹了Vue的過度與動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Vue實(shí)現(xiàn)Layui的集成方法步驟

    Vue實(shí)現(xiàn)Layui的集成方法步驟

    這篇文章主要介紹了Vue實(shí)現(xiàn)Layui的集成方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Vue 項(xiàng)目 package.json 完整示例詳解(主流實(shí)踐 / 逐項(xiàng)說明)

    Vue 項(xiàng)目 package.json 完整示例詳解(主流實(shí)踐 / 逐

    本文提供Vue3+Vite項(xiàng)目配置模板,集成TypeScript、Pinia、VueRouter等工具,涵蓋包管理器(pnpm)、代碼規(guī)范、測試及提交流程配置,重點(diǎn)說明版本控制策略、依賴覆蓋注意事項(xiàng)與常見構(gòu)建問題排查方案,感興趣的朋友一起看看吧
    2025-08-08
  • vue3前端獲取文件的絕對路徑問題解決

    vue3前端獲取文件的絕對路徑問題解決

    這篇文章主要給大家介紹了關(guān)于vue3前端獲取文件的絕對路徑問題解決的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09
  • 詳解Vue.js動態(tài)綁定class

    詳解Vue.js動態(tài)綁定class

    Vue.js的核心是一個響應(yīng)的數(shù)據(jù)綁定系統(tǒng),它允許我們在普通 HTML 模板中使用特殊的語法將 DOM “綁定”到底層數(shù)據(jù)。被綁定的DOM 將與數(shù)據(jù)保持同步,每當(dāng)數(shù)據(jù)有改動,相應(yīng)的DOM視圖也會更新。基于這種特性,通過vue.js動態(tài)綁定class就變得非常簡單。一起來看下吧
    2016-12-12
  • Vue2學(xué)習(xí)筆記之請求數(shù)據(jù)交互vue-resource

    Vue2學(xué)習(xí)筆記之請求數(shù)據(jù)交互vue-resource

    本篇文章主要介紹了Vue2學(xué)習(xí)筆記之?dāng)?shù)據(jù)交互vue-resource ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Django+Vue.js搭建前后端分離項(xiàng)目的示例

    Django+Vue.js搭建前后端分離項(xiàng)目的示例

    本篇文章主要介紹了Django+Vue.js搭建前后端分離項(xiàng)目的示例,具有一定參考價值,有興趣的可以了解一下
    2017-08-08
  • vue中如何獲取本地IP地址

    vue中如何獲取本地IP地址

    這篇文章主要介紹了vue中如何獲取本地IP地址,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 淺談Vue.js中的v-on(事件處理)

    淺談Vue.js中的v-on(事件處理)

    本篇文章主要介紹了Vue.js中的v-on(事件處理),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue2.x中$attrs的使用方法教程

    vue2.x中$attrs的使用方法教程

    正常情況下Vue推薦用props向子組件參數(shù),但是在特定場景下,使用$attrs會更方便,下面這篇文章主要給大家介紹了關(guān)于vue2.x中$attrs使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評論

西丰县| 黄石市| 格尔木市| 商丘市| 乐都县| 健康| 乌苏市| 大渡口区| 雅安市| 太保市| 加查县| 林口县| 临武县| 吉安县| 达州市| 台北县| 余干县| 云阳县| 江川县| 洮南市| 缙云县| 登封市| 宁陕县| 天镇县| 辽阳市| 宁安市| 威远县| 上思县| 红安县| 宜阳县| 营口市| 韶关市| 太谷县| 阿图什市| 广南县| 仙居县| 信宜市| 平山县| 古丈县| 四子王旗| 报价|