vue打包后的線上部署Apache、nginx全過程
我們一般情況下將vue項(xiàng)目開發(fā)完成后會進(jìn)行打包上線,本文介紹多種部署情況。
一、Apache服務(wù)器
1、vue路由mode:'hash'模式(帶#號模式)
hash模式打包后可以直接丟到服務(wù)器上去,不會有路由上的問題,接口的話根據(jù)項(xiàng)目的路徑寫個(gè)全局配置就行了,這里不詳細(xì)說。
2、vue路由mode:'history'模式(不帶#號模式)
vue在history模式打包時(shí),如果項(xiàng)目為二級目錄,則在config→index.js→build→使用assetsPublicPath: '/dist/',在路由中,使用base: '/dist/'
否則為assetsPublicPath: '/dist/'
而對于打包完后css圖片路徑不對的情況:在build→utils.js→

(1)、部署于服務(wù)器根目錄
首先,我們使用build將項(xiàng)目打包會得到一個(gè)dist文件夾
,
直接打開其中的index.htm頁面會一片空白,但不會報(bào)錯(cuò)。需要將文件放置于服務(wù)器根目錄,這里我用phpsyudy演示。

,
可是如果在其中某個(gè)路由刷新,則會出現(xiàn)404現(xiàn)象:

那是由于所有路由的入口都在index頁面,直接從中間進(jìn)入會迷失方向。此時(shí)需要在后臺配置重定向方可解決。
apache需要修改httpd.conf:
- 第一步:將 LoadModule rewrite_module modules/mod_rewrite.so 打開,
- 第二步:修改Directory的AllowOverride為all,注意配置文件中有很多Directory,不要該錯(cuò)了,否則不會生效的,Directory一定是你apache服務(wù)的根目錄。
- 第三步:文件最后添加:ErrorDocument 404 /index.html (也可寫在vhosts.ini的VirtualHost標(biāo)簽的末尾)
- 結(jié)果:完美運(yùn)行:

(2)、部署于服務(wù)器二級或多級目錄
當(dāng)然,一臺服務(wù)器上的項(xiàng)目非常多,不可能都部署在根目錄,下面來部署二級目錄
我們將服務(wù)器的根目錄設(shè)置為two:


這是因?yàn)槟愕捻?xiàng)目打包dist并不是你服務(wù)器訪問的跟目錄,訪問是http://xxx.xxx.com/dist,跟目錄訪問:http://xxx.xxx.com;由于包并不是根目錄router路由無法找到路徑中的組件,解決方法:
方法一:
需要修改router中的index.js路由部分,在每個(gè)path中加上你項(xiàng)目名稱就行了,這樣就能夠成功了
{
path: '/dist/',
redirect: '/dist/asd'
}?方法二:
{
path: '/',
redirect: '/asd'
}(不變)在mode: 'history',之后添加
base: '/dist/',(推薦使用)
注意:配置里也要改成相應(yīng)的ErrorDocument 404 /dist/index.html
如果index.html 可以正常訪問,但是引用的js,css等文件服務(wù)器響應(yīng)均為404,則有可能打包后的資源使用了絕對根目錄路徑,因此將項(xiàng)目部署到特定目錄下,其引入的資源路徑無法被正確解析。
解決辦法:
1、修改config => index.js => build => assetsPublicPath 中的'/'成為'./'

2、在build => util.js 里找到ExtractTextPlugin.extract增加一行:publicPath: '../../',主要解決背景圖片路徑的問題。

結(jié)果:

(3)、部署多個(gè)vue項(xiàng)目(推薦)
以上皆是配置于服務(wù)器根目錄,但是如果我有多個(gè)vue項(xiàng)目要上線呢,這時(shí)就要用到.htaccess文件了。
我們打包兩個(gè)dist文件,第二個(gè)取名dist2,
,在每個(gè)項(xiàng)目的根目錄(不是服務(wù)器根目錄哦),新建.htaccess,里面寫上
ErrorDocument 404 /dist/index.html和ErrorDocument 404 /dist2/index.html就行了,記得把相應(yīng)的配置表里的設(shè)置刪掉,不然會沖突。
結(jié)果:

二、nginx服務(wù)器
1、vue路由mode:'hash'模式(帶#號模式)
hash模式打包后可以直接丟到服務(wù)器上去,不會有路由上的問題,接口的話根據(jù)項(xiàng)目的路徑寫個(gè)全局配置就行了,這里不詳細(xì)說。線上代理這里也不說了。
2、vue路由mode:'history'模式(不帶#號模式)
(1)、部署于服務(wù)器根目錄
在vhosts.conf里配置:
server {
listen 80;
server_name www.2.com 2.com;
root "C:\Users\Administrator\Desktop\dist_root";
location / {
root C:\Users\Administrator\Desktop\dist_root;
index index.html index.htm index.php;
error_page 404 /index.html;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}方法二:
location /{
root C:\Users\Administrator\Desktop\dist_root;;
index index.html index.htm;
if (!-e $request_filename) {
rewrite ^/(.*) /index.html last;
break;
}
}(1)、部署于服務(wù)器二級目錄
location /wx{
root C:\Users\Administrator\Desktop\dist_two;
index index.html index.htm;
#error_page 404 /wx/index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /wx/index.html last;
break;
}
}對于同一服務(wù)器下多個(gè)vue項(xiàng)目,設(shè)置也比較簡單
location /dist {
root C:\Users\Administrator\Desktop\dist_two;
index index.html index.htm index.php;
#error_page 404 /dist/index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /dist/index.html last;
break;
}
}
location /dist2 {
root C:\Users\Administrator\Desktop\dist_two;
index index.html index.htm index.php;
#error_page 404 /dist2/index.html;
if (!-e $request_filename) {
rewrite ^/(.*) /dist2/index.html last;
break;
}
}總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- vue打包并部署到nginx上的實(shí)現(xiàn)示例
- 項(xiàng)目nginx部署到非根目錄下vue配置方案
- nginx代理部署Vue刷新頁面404的問題解決
- nginx部署vue頁面白屏或刷新404問題解決
- nginx配置同一域名同一端口下部署多個(gè)vue項(xiàng)目的實(shí)現(xiàn)
- Nginx同一端口部署多個(gè)前后端分離的vue項(xiàng)目完整步驟
- 在vue中實(shí)現(xiàn)跨域方法小結(jié)
- 使用Docker+Nginx部署vue項(xiàng)目詳細(xì)圖文教程
- Nginx部署多個(gè)vue項(xiàng)目的方法步驟
- 使用Nginx部署前端Vue項(xiàng)目的實(shí)現(xiàn)
相關(guān)文章
Vue3如何通過ESLint校驗(yàn)代碼是否符合規(guī)范詳解
ESLint可以靈活設(shè)置規(guī)則,也發(fā)布了很多公開的規(guī)則集,下面這篇文章主要給大家介紹了關(guān)于Vue3如何通過ESLint校驗(yàn)代碼是否符合規(guī)范的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
基于vue和react的spa進(jìn)行按需加載的實(shí)現(xiàn)方法
這篇文章主要介紹了基于vue和react的spa進(jìn)行按需加載,需要的朋友可以參考下2018-09-09
vue實(shí)現(xiàn)滑動(dòng)驗(yàn)證條
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)滑動(dòng)驗(yàn)證條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
vue里如何主動(dòng)銷毀keep-alive緩存的組件
這篇文章主要介紹了vue里如何主動(dòng)銷毀keep-alive緩存的組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

