vue打包后的線上部署Apache、nginx全過程
我們一般情況下將vue項(xiàng)目開發(fā)完成后會(huì)進(jìn)行打包上線,本文介紹多種部署情況。
一、Apache服務(wù)器
1、vue路由mode:'hash'模式(帶#號(hào)模式)
hash模式打包后可以直接丟到服務(wù)器上去,不會(huì)有路由上的問題,接口的話根據(jù)項(xiàng)目的路徑寫個(gè)全局配置就行了,這里不詳細(xì)說。
2、vue路由mode:'history'模式(不帶#號(hào)模式)
vue在history模式打包時(shí),如果項(xiàng)目為二級(jí)目錄,則在config→index.js→build→使用assetsPublicPath: '/dist/',在路由中,使用base: '/dist/'
否則為assetsPublicPath: '/dist/'
而對(duì)于打包完后css圖片路徑不對(duì)的情況:在build→utils.js→
(1)、部署于服務(wù)器根目錄
首先,我們使用build將項(xiàng)目打包會(huì)得到一個(gè)dist文件夾
,
直接打開其中的index.htm頁面會(huì)一片空白,但不會(huì)報(bào)錯(cuò)。需要將文件放置于服務(wù)器根目錄,這里我用phpsyudy演示。
,
可是如果在其中某個(gè)路由刷新,則會(huì)出現(xiàn)404現(xiàn)象:
那是由于所有路由的入口都在index頁面,直接從中間進(jìn)入會(huì)迷失方向。此時(shí)需要在后臺(tái)配置重定向方可解決。
apache需要修改httpd.conf:
- 第一步:將 LoadModule rewrite_module modules/mod_rewrite.so 打開,
- 第二步:修改Directory的AllowOverride為all,注意配置文件中有很多Directory,不要該錯(cuò)了,否則不會(huì)生效的,Directory一定是你apache服務(wù)的根目錄。
- 第三步:文件最后添加:ErrorDocument 404 /index.html (也可寫在vhosts.ini的VirtualHost標(biāo)簽的末尾)
- 結(jié)果:完美運(yùn)行:
(2)、部署于服務(wù)器二級(jí)或多級(jí)目錄
當(dāng)然,一臺(tái)服務(wù)器上的項(xiàng)目非常多,不可能都部署在根目錄,下面來部署二級(jí)目錄
我們將服務(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,則有可能打包后的資源使用了絕對(duì)根目錄路徑,因此將項(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è)置刪掉,不然會(huì)沖突。
結(jié)果:
二、nginx服務(wù)器
1、vue路由mode:'hash'模式(帶#號(hào)模式)
hash模式打包后可以直接丟到服務(wù)器上去,不會(huì)有路由上的問題,接口的話根據(jù)項(xiàng)目的路徑寫個(gè)全局配置就行了,這里不詳細(xì)說。線上代理這里也不說了。
2、vue路由mode:'history'模式(不帶#號(hào)模式)
(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ù)器二級(jí)目錄
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; } }
對(duì)于同一服務(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)文章
Vue官方推薦AJAX組件axios.js使用方法詳解與API
axios是Vue官方推薦AJAX組件,下面為大家介紹axios.js庫的詳細(xì)使用方法與API介紹2018-10-10基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點(diǎn)續(xù)傳的全局上傳插件功能
這篇文章主要介紹了基于vue-simple-uploader封裝文件分片上傳、秒傳及斷點(diǎn)續(xù)傳的全局上傳插件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02vue使用elementUI組件實(shí)現(xiàn)分頁效果
分頁在展示數(shù)據(jù)列表的場景肯定是非常多的,一般的項(xiàng)目開發(fā)中,數(shù)據(jù)量特別大,一般都是后端接口直接處理分頁返回,前端直接調(diào)用即可,本文給大家介紹了vue使用elementUI組件實(shí)現(xiàn)分頁效果,需要的朋友可以參考下2023-12-12vue19 組建 Vue.extend component、組件模版、動(dòng)態(tài)組件 的實(shí)例代碼
這篇文章主要介紹了vue19 組建 Vue.extend component、組件模版、動(dòng)態(tài)組件 的實(shí)例代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04vue中el-autocomplete與el-select的異同
本文主要介紹了vue中el-autocomplete與el-select的異同,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05vue select組件的使用與禁用實(shí)現(xiàn)代碼
這篇文章主要介紹了vue--select組件的使用與禁用的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值 ,需要的朋友可以參考下2018-04-04