今天做vue單頁專案,在本地dev環境下一切正常,準備部署到生產環境,結果發現頁面一片空,想了許久,都不知道是什麼問題。後來和後台同事交流,發現我的頁面並不是在伺服器根目錄,而是由子目錄。
最近好多夥伴說,我用vue做的專案本地是可以的,但部署到伺服器遇到好多問題:資源找不到,直接訪問index.html頁面空白,重新整理當前路由404......用react做的專案也同樣遇到類似問題。現在我們一起討論下單頁面如何部署到伺服器?
由於前端路由緣故,單頁面應用應該放到nginx或者apache、tomcat等web**伺服器中,千萬不要直接訪問index.html,同時要根據自己伺服器的專案路徑更改react或vue的路由位址。
如果說專案是直接跟在網域名稱後面的,比如: ,根路由就是 '/'。
如果說專案是直接跟在網域名稱後面的乙個子目錄中的,比如:/children ,根路由就是 '/children ',不能直接訪問index.html。
以配置nginx為例,配置過程大致如下:(假設:
1、專案檔案目錄:/mnt/html/spa(spa目錄下的檔案就是執行了npm run dist 後生成的dist目錄下的檔案)
2、訪問網域名稱:spa.sosout.com)
進入nginx.conf新增如下配置:
注意事項:server
location /
access_log /mnt/logs/nginx/access.log main;
}
1、配置網域名稱的話,需要80埠,成功後,只要訪問網域名稱即可訪問的專案
2、如果你使用了react-router的 browserhistory 模式或 vue-router的 history 模式,在nginx配置還需要重寫路由:
為什麼要重寫路由?因為我們的專案只有乙個根入口,當輸入類似/home的url時,如果找不到對應的頁面,nginx會嘗試載入index.html,這是通過react-router或vue-router就能正確的匹配我們輸入的/home路由,從而顯示正確的home頁面,如果browserhistory模式或history模式的專案沒有配置上述內容,會出現404的情況。server
location /
location @fallback
access_log /mnt/logs/nginx/access.log main;
}
簡單舉兩個例子,乙個vue專案乙個react專案:
vue專案
網域名稱:path: '/',
children: [,
}, }, , , ]
}]
############
# 其他配置
# 其他配置
############
}
react專案
網域名稱:
/**
* 疑惑一:
* react createclass 和 extends react.component 有什麼區別?
* 之前寫法:
* getinitialstate: function()
* })
* es6寫法(通過es6類的繼承實現時state的初始化要在constructor中宣告):
* class examplecomponent extends react.component
* }
* }*/
import react, from 'react'; // react核心
import from 'react-router'; // 建立route所需
import config from '../config/index';
import layout from '../component/layout/layout'; // 布局介面
import login from '../containers/login/login'; // 登入介面
/** * (路由根目錄元件,顯示當前符合條件的元件)
* * @class roots
* @extends
*/class roots extends component );}
}// const history = process.env.node_env !== 'production' ? browserhistory : hashhistory;
// 快速入門
const home = (location, cb) => , 'home');
cb(null, require('../containers/charts/lines').default)
}, 'chartline');
}// 基礎元件-按鈕
const button = (location, cb) => , 'button');
}// 基礎元件-圖示
const icon = (location, cb) => , 'icon');
}// 使用者管理
const user = (location, cb) => , 'user');
}// 系統設定
const setting = (location, cb) => , 'setting');
}// 廣告管理
const adver = (location, cb) => , 'adver');
}// 元件一
const oneui = (location, cb) => , 'oneui');
}// 元件二
const twoui = (location, cb) => , 'twoui');
}// 登入驗證
const requireauth = (nextstate, replace) =>
});}
}const routeconfig = (
"/home" component= onenter=>
// 預設載入的元件,比如訪問www.test.com,會自動跳轉到www.test.com/home
"/home" getcomponent= onenter= />
"/chart/line" getcomponent= onenter= />
"/general/button" getcomponent= onenter= />
"/general/icon" getcomponent= onenter= />
"/user" getcomponent= onenter= />
"/setting" getcomponent= onenter= />
"/adver" getcomponent= onenter= />
"/ui/oneui" getcomponent= onenter= />
"/ui/twoui" getcomponent= onenter= />
"/login" component=> // 所有的訪問,都跳轉到roots
// 預設載入的元件,比如訪問www.test.com,會自動跳轉到www.test.com/home
"*" to="/home" />
);export default routeconfig;
############
# 其他配置
# 其他配置
############
}
部署專案到伺服器
購買伺服器,可以到阿里雲 華為雲等國內一些大型雲服務平台購買,個人推薦國內的ucloud平台,活動多價效比高 購買的伺服器使用liunx作業系統,推薦使用centos 7。有了雲伺服器,還需要乙個網域名稱,通過網域名稱訪問 我想應該沒有人會用自己的ip來訪問吧 購買網域名稱,同樣可以在以上幾個雲服務...
專案部署到伺服器
今天,第一次為工作寫日子,以後肯定會一直記錄,好了,說一下重點吧。如何把已完成的專案部署到伺服器,準備工作,在伺服器上搭建 jdk 和 tomcat 版本根據個人需求,我是 jdk1.7 和 tomcat 7.0 具體怎麼搭建上網查吧。第一步 把自己的專案上傳到伺服器上。我用的是最笨的方法,因為伺服...
如何把 Hugo 專案部署到伺服器
hugo 官網截圖 hugo 基於 go 語言開發的開源靜態 生成器,速度極快,能在幾毫秒的速度打包完乙個 20 頁的靜態部落格。像 1password support 和 let s encrypt 就是用 hugo 製作他們的靜態 的。21雲盒提供了極簡單的 hugo 部署方法,你可以在21雲盒...