国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

Vue 項目打包部署總結

開發 前端
使用Vue做前后端分離項目時,通常前端是單獨部署,用戶訪問的也是前端項目地址,因此前端開發人員很有必要熟悉一下項目部署的流程與各類問題的解決辦法了。

 使用Vue做前后端分離項目時,通常前端是單獨部署,用戶訪問的也是前端項目地址,因此前端開發人員很有必要熟悉一下項目部署的流程與各類問題的解決辦法了。

Vue項目打包部署本身不復雜,不過一些前端同學可能對服務器接觸不多,部署過程中還是會遇到這樣那樣的問題。本文介紹一下使用nginx服務器代理前端項目的方法以及項目部署的相關問題,內容概覽:

一、準備工作——服務器和nginx使用

1. 準備一臺服務器

我的是ubuntu系統,linux系統的操作都差不多。沒有服務器怎么破?

如果你只是想體驗一下,可以嘗試各大廠的云服務器免費試用套餐,比如華為云免費試用,本文相關操作即是在華為云上完成的。

不過如果想時常練練手,我覺得可以購買一臺云服務器,比如上面的華為云或者阿里云都還挺可靠。

2. nginx安裝和啟動

輕裝簡行,這部分不作過多贅述(畢竟網上相關教程一大堆),正常情況下僅需下面兩個指令: 

  1. # 安裝,安裝完成后使用nginx -v檢查,如果輸出nginx的版本信息表明安裝成功  
  2. sudo apt-get install nginx  
  3. # 啟動  
  4. sudo service nginx start 

啟動后,正常情況下,直接訪問 http://服務器ip 或 http://域名 (本文測試用的服務器沒有配置域名,所以用ip,就本文而言,域名和ip沒有太大區別)應該就能看到nginx服務器的默認頁面了——如果訪問不到,有可能是你的云服務器默認的http服務端口(80端口)沒有對外開放,在服務器安全組配置一下即可。

3、 了解nginx: 修改nginx配置,讓nginx服務器代理我們創建的文件

查看nginx的配置,linux系統下的配置文件通常會存放在/etc目錄下,nginx的配置文件就在/etc/nginx文件夾,打開文件/etc/nginx/sites-available/default(nginx可以有多個配置文件,通常我們配置nginx也是修改這個文件):

可以看到默認情況下,nginx代理的根目錄是/var/www/html,輸入 http://服務器ip會訪問這個文件夾下的文件,會根據index的配置值來找默認訪問的文件,比如index.html、index.htm之類。

我們可以更改root的值來修改nginx服務代理的文件夾:

1)、創建文件夾/www,并創建index.html,寫入"Hello world"字符串 

  1. mkdir /www  
  2. echo 'Hello world' > /www/index.html 

2)、修改root值為 /www

3)、sudo nginx -t 檢查nginx配置是否正確

4)、加載nginx配置:sudo nginx -s reload

再次訪問頁面,發現頁面內容已經變成了我們創建的index.html:

二、Vue項目打包同步文件到遠程服務器

1、 打包

默認情況下,使用vue-cli創建的項目,package.json里的script應該已經配置了build指令,直接執行yarn build 或者 npm run build即可。

2、 同步到遠程服務器

我們使用nginx部署Vue項目,實質上就是將Vue項目打包后的內容同步到nginx指向的文件夾。之前的步驟已經介紹了怎樣配置nginx指向我們創建的文件夾,剩下的問題就是怎么把打包好的文件同步到服務器上指定的文件夾里,比如同步到之前步驟中創建的/www。

同步文件可以在git-bash或者powershell使用scp指令,如果是linux環境開發,還可以使用rsync指令: 

  1. scp -r dist/* root@117.78.4.26:/www  
  2. 或  
  3. rsync -avr --delete-after dist/* root@117.78.4.26:/www  

注意這里以及后續步驟是root使用用戶遠程同步,應該根據你的具體情況替換root和ip(ip換為你自己的服務器IP)。

為了方便,可以在package.json腳本中加一個push命令,以使用yarn為例(如果你使用npm,則push命令中yarn改成npm  run即可): 

  1. "scripts": {  
  2.     "build": "vue-cli-service build",  
  3.     "push": "yarn build && scp -r dist/* root@117.78.4.26:/www"  
  4.   }, 

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

為了避免每次執行都要輸入root密碼,我們可以將本機的ssh同步到遠程服務器的authorized_keys文件中。

3、 同步ssh key

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

    b. 同步ssh key到遠程服務器,使用ssh-copy-id指令同步 

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

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

當然你也可以手動復制本地~/.ssh/id_rsa.pub(注意是pub結尾的公鑰)文件內容追加到服務器~/.ssh/authorized_keys的后面(從命名可以看出該文件可以存儲多個ssh key)

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

創建了一個測試項目(點擊本鏈接可以在gihub查看)試一下,打包、文件上傳一句指令搞定啦:

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

至此,常規情況下發布Vue項目就介紹完了,接下來介紹非域名根路徑下發布以及history路由模式發布方法。

三、非域名根路徑發布

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

1、 nginx配置

只需要添加一條location規則,分配訪問路徑和指定訪問文件夾。我們可以把/test指向之前創建的/www文件夾,這里因為文件夾名稱和訪問路徑不一致,需要用到alias這個配置:

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

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

2、項目配置

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

更新nginx配置,發布后即可正常訪問啦。這里的兩種配置方式是有區別的,接下來會看一下它們的區別。

如果不進行項目配置,直接發布訪問會出現JS、CSS等資源找不到導致頁面空白的問題:

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

查看打包后的文件結構,可以看到js/css/img/static等資源文件是與index.html處于同級別的:

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

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

 

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

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

3、絕對路徑引用的靜態資源找不到的問題

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

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

在模板中使用: 

  1. <img :src="`${$pb}static/logo.png`"> 

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

  •  如果需要使用圖片等作為背景圖片等,盡量使用內聯方式使用吧,像在模板中使用一樣。
  •  如果需要引入樣式文件,則在index.html中使用插值方式引入吧。

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

四、history模式部署

默認情況下,Vue項目使用的是hash路由模式,就是URL中會包含一個#號的這種形式。#號以及之后的內容是路由地址的hash部分。

正常情況下,當瀏覽器地址欄地址改變,瀏覽器會重新加載頁面,而如果是hash部分修改的話,則不會,這就是前端路由的原理,允許根據不同的路由頁面局部更新而不刷新整個頁面。

H5新增了history的pushState接口,也允許前端操作改變路由地址但是不觸發頁面刷新,history模式即利用這一接口來實現。因此使用history模式可以去掉路由中的#號。

1、項目配置

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

2、 nginx配置

對于history模式,假設項目部署到域名下的/test目錄,訪問http://xxx/test/about的時候,服務器會去找/test指向的目錄下的about子目錄或文件,很顯然因為是單頁面應用,并不會存在a這個目錄或者文件,就會導致404錯誤:

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

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

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

非域名根目錄下部署,首先肯定要配置publicPath。需要注意的點前面其實已經提過了,就是這種情況下不能使用相對路徑./或者空串配置publicPath。

為什么呢?

原因是它會導致router-link等的表現錯亂,使用測試項目分別使用兩種配置打包發布,審查元素就能看出區別。在頁面上有兩個router-link,Home和About:

兩種配置打包后的結果如下。

    a. publicPath配置為./或者空串:    

     b. publicPath配置為/test:

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

五、結語

關于Vue項目發布的相關問題就先總結這么多,幾乎在每一步都踩過坑才有所體會,有問題歡迎各位同學一起探討。 

 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2024-11-01 08:10:00

Vue開發

2023-09-14 20:55:52

NodeJSDocker

2020-12-18 09:15:16

LinuxVue命令

2023-09-12 07:06:04

2024-01-16 08:26:25

Vue項目服務器

2024-02-19 16:25:29

前端Vue.jsJavaScript

2021-09-01 11:10:55

Spring BootShellJava

2013-12-11 22:08:22

2025-02-07 08:39:32

Shell部署測試

2009-08-11 17:39:59

.NET打包項目

2022-02-20 19:02:16

RollupVue 2JavaScrip

2021-08-04 08:27:00

VueReact自動化部署

2012-08-15 09:22:49

JavaScript

2013-01-21 10:19:50

JavaScript項目管理JS

2024-02-20 08:51:56

PythonFlask工具

2015-06-11 16:36:27

ASP.NET

2022-09-07 08:00:00

機器學習MLFlow工具

2021-05-26 10:40:28

Vue3TypeScript前端

2012-07-11 23:32:33

MVC3項目

2012-07-04 10:47:56

軟件項目項目管理項目流程
點贊
收藏

51CTO技術棧公眾號

亚洲 日韩 国产第一区| 国产精品一二二区| 欧美xxxx黑人又粗又长精品| 99热国产精品| 国产永久免费高清在线观看视频| 亚洲国产天堂网精品网站| 麻豆成人入口| 黄频视频在线观看| 欧美性xxxx在线播放| 国产91在线播放精品| ts人妖另类在线| 亚洲国产精品二十页| 2021中文字幕在线| 91夜夜揉人人捏人人添红杏| www.av精品| 超碰在线观看免费| 国产欧美精品在线播放| 久久影院午夜论| 黄网在线免费看| 91九色在线免费视频| 国产精品麻豆一区二区| 欧美三级网址| 蜜桃臀一区二区三区| 亚洲国产日韩在线一区模特| 日韩电影精品| 亚洲一区3d动漫同人无遮挡 | 精品一区二区三区久久| 四虎影院在线域名免费观看| 中日韩美女免费视频网站在线观看| 亚洲啪啪91| 一本到av在线| 久久久久久这里只有精品| 精品一区二区在线免费观看| 在线观看黄av| 成人精品久久久| 亚洲丝袜制服诱惑| 久久久久久久久久久久电影| 黄色影视在线观看| 日韩久久精品一区| 亚洲日本国产| 啊v视频在线| 99视频免费观看| 欧美日韩免费在线观看| 欧美色女视频| 原千岁中文字幕| 国产97在线|亚洲| 国产精品国产精品国产专区不片| 国产成人免费av一区二区午夜| 国产精品啪啪啪视频| 日韩美女av在线| 捆绑调教美女网站视频一区| 国产精品入口日韩视频大尺度| av在线播放成人| 国产精品自拍偷拍| 四虎永久在线精品无码视频| 精品国产sm最大网站免费看| 欧美成人中文字幕在线| 午夜一区二区三区| 国产精品99精品一区二区三区∴| 亚洲精品mp4| 欧美hdxxx| 中文字幕日本欧美| 欧美国产日韩电影| 久久久免费观看| 亚洲美女色禁图| 精品久久久久av影院| 无码aⅴ精品一区二区三区浪潮 | 影音先锋成人在线电影| 波多野结衣家庭教师视频| 久久亚洲精华国产精华液| 91在线短视频| 欧美黄色大片网站| 日韩欧美一二三| 欧美18xxxxx| 亚洲激情网站免费观看| 中文字幕中文字幕在线中心一区| 影音先锋中文字幕一区| 欧美有码在线观看| 久久a级毛片毛片免费观看| 午夜精品三级视频福利| 九色在线观看| 亚洲自拍偷拍一区| 精品中文字幕一区二区小辣椒| 给我免费播放片在线观看| 中文字幕日韩av资源站| 粉嫩tv在线播放| 欧美videos大乳护士334| 亚洲电影有码| 国产一区二区三区四区五区加勒比| 日韩精品一二区| 成人黄色电影网址| 精品视频1区2区| 欧美一级三级| 色综合视频网站| 久久sese| 国产日本欧美一区二区三区在线| 久久久久久久久久久久久久久久久久久久| 不卡av在线播放| 久久久综合色| 奇米影视首页 狠狠色丁香婷婷久久综合| 北条麻妃国产九九精品视频| 尤物视频免费在线观看| 亚洲欧美偷拍三级| 五月天综合网站| 日本调教视频在线观看| 永久免费精品影视网站| 国产成人精品免费看| 超碰在线观看免费| 欧美日韩精品免费观看| 欧美伊人久久久久久久久影院 | www.成人| 久久最新免费视频| 91精品国产入口在线| 99国产精品久久久久久久| 爆操妹子视频在线观看| 亚洲天堂一区二区三区| 亚洲激情专区| 幼a在线观看| 韩国精品一区二区三区六区色诱| 欧美在线视频你懂得| 日韩手机在线| 欧美拍拍视频| 久久久久久久久久久久久久久久av | 欧美日韩第一页| 久久蜜桃香蕉精品一区二区三区| 综合激情网...| 中文字幕第12页| 日产精品久久久一区二区福利| 久久久国产午夜精品| gogo大尺度成人免费视频| 91爱爱小视频k| 91高潮在线观看| 欧美日韩精品高清| 成人激情免费电影网址| 日韩av中文字幕一区| 日韩资源在线| 亚洲欧洲国产日韩精品| 日韩一区二区av| 色综合色综合色综合 | 日韩欧美一区视频| 久久99精品一区二区三区| 国产激情久久久久| 亚洲国产一区视频| 影音先锋日韩资源| 99re8这里有精品热视频免费| 国内高清免费在线视频| а天堂8中文最新版在线官网| 91精选福利| 国产成人l区| 91在线观看入口| 三级三级久久三级久久18| 欧美在线一区二区三区四| 日韩一区二区免费在线观看| 欧美国产视频在线| 亚洲综合不卡| www.国产精品一区| 国产黄在线观看免费观看不卡| 中文字幕在线永久在线视频| 男女啪啪免费视频网站| 蜜桃视频在线观看成人| 国产日韩欧美日韩| 98精品国产自产在线观看 | 亚洲999一在线观看www| 吴梦梦av在线| 欧美成人在线影院| 亚洲欧美成人一区二区在线电影| 亚洲最色的网站| 99re66热这里只有精品3直播| 国产资源在线观看| 国产精品亚洲综合在线观看 | 91免费欧美精品| 国内精品国产三级国产在线专| 欧美激情手机在线视频| 欧美黑人xxx| 国产97色在线| 韩日午夜在线资源一区二区| 台湾无码一区二区| 啊啊啊啊啊好爽| 影音先锋欧美资源| 2021国产精品视频| 亚洲综合丝袜美腿| 亚洲综合999| 亚洲影院免费| av成人app永久免费| 国产一区二区三区朝在线观看| 国产导航在线| 91精品一久久香蕉国产线看观看| 亚洲va中文在线播放免费| 欧美日韩卡一| 九九亚洲精品| 欧美日韩91| 日韩电影在线看| www欧美成人18+| 亚洲一区二区偷拍精品| 日韩美女一区二区三区四区| 在线日韩日本国产亚洲| 91精品国产成人| 欧美日韩成人一区二区三区 | 国产福利一区二区三区视频 | 成年人视频大全|