版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
服務端渲染:next,js、nuxl.js等服務端泊染框架構建的項II部署到服務器,并用PM2守護程序最近好多伙伴說,我用vue做的項目本地是可以的,但部署到服務器遇到好多問題:個源找不到,立接訪問MdexAt3/頁向空白,刷新當前路由404。。。用react做的項目也同樣遇到類似問題。現(xiàn)在我們一起討論下單頁面如何部署到服務器?由于前端路由緣故,單頁面應用應該放到nginx或者apache、tomcat等web代理服務器中,千萬不要直接訪問index.htmL同時要根據(jù)自己服務器的項目路徑更改react或vue的路由地址。如果說項目是直接跟在域名后面的,比如:http:〃,根路由就是7。如果說項目是直接跟在域名后面的一個子目錄中的,比$n:/children,根路由就是'/children不能直接訪問index.htmlo以配置Nginx為例,配置過程大致如下:(假設:1、項目文件目錄:/mnt/html/spa(spa目錄下的文件就是執(zhí)行了npmrundist后生成的dist目錄下的文件)2、訪問域名:)進入nginx.conf新增如下配置:server{listen80;serverja4nAespq.sosout.coM;rootindexindex.hti^l;location?A/faWco八\.ico${root/kv\nt/htkw//spa;)location/{tryJiles iuri/proxy_$et_keadeirHost 物ost;prox”et_〃eaderX-Real-IP ^rekv\ote_addr;proxy_$et_headeirX-Forwarded-For proxy_add_xjor\A/arded_for;proxy_$et_headerX-Forwarded-ProtoSsMenAC;)accessjog/Met/(og,/ngi八x/access.(og出〃,八;)注意事項:工、配置.域名的話,需要80端口,成功后,只要訪問域名即可訪問的項目2、如果你使用了“act-丫。er的bro\A/serHistory模式或vue-fouter*的kistory模式,在八g/'nx配置還需要重寫路由:server{listen80;server_Hakv\espasosout.co^root/Mnt/htM〔/spa;index心dex.ktiW;location?人/fas'c。n\.ico${root/kv\nt/htkv\l/$pa;}location/{tryjile^$uri$un7^fallback;indexindex.kt^v\l;proxy_$et_keaderHost$host;proxyX-Real-IP$re^ote_addr;proxy_$et_headerproxy_$et_headerX-Forwarded-For$proxy_add_xjor\A/arded_for;proxy_$et_headerproxy_$et_headerX-Forwarded-Proto$sc〃e&e;location^fallback{rewrite人.*$/index.htiHbreak;accessjog/Mnt/1ogs/nginx/access,log kv\aiia;為什么要重寫路由?因為我們的項H只有一個根入口,當輸入類似/hoke的u”時,如果找不到對應的頁面,cgicx會嘗試加載rndex.htkwl,這是通過react-router或vue-router就能正確的匹配我們輸入的/人。26路由,從而顯示正確的kowve頁面,如果ferowserHrstory模式或kkt"g模式的項目沒有配置上述內容,會出現(xiàn)404的情況。簡單舉兩個例子,一個vue項目一個react項目:vue項目:域名:Branch:master▼vue-taobao/src/router/index.jsOsosout登錄攔截1contributor47lines(40sloe)1.04KBimportAppfrom1../App(//首頁consthome=r=>require.ensure([],()=>r(require(*../page/home/index1)),'home')56 //物濠constlogistics=r=>require.ensure((],()=>r(require(,../page/logistics/index,)),9 //購物車constcart=r=>require.ensure([]9()=>r(require(a?./page/cart/index'))r*cart,)12 //我的constprofile=r=>require.ensure((],()=>r(require(*../page/profile/index*))9*pr1414 //importAppfrokv\L/App'//首頁constkokvxe=r=>require.enured],()=>rfrequire(,../page/ho^e/iiade>x,y),//物流coiastlogistics=r=>八sure(口,0=>dequi必../page/logistics/i八dex?logistics')//購物彳constcart=r=> nsure(口,0=>r(reqaire(*../page/cart/i^dex1)),'cart1)//我的constprofile=r=>require.enquired],。=>vXirequireC../page/profHe/profile1)//冷泉界面constlogin=r=> 0=>r(requiire(,../page/u^er/logiia,y)Jlogin1)exportdefault[{
path:yscomponent:Appj//頂層路由,對應以children:[{patk;,/koMeL〃首頁component:hokweL(path'/logistics^//物流coi^poMnt:logistics,0A比〃;{logivt\true}}>(pathVcart',//購物車component:cart}^eta:(login:true)L(path'/profile1,//我的component:profile)>(path:l/login,J//登錄界ifii
234671011,*>13141516171819212223242526272829303132333435cokvxpoMnt:logMpath:redirect:}]〃(runtime-onlyorstandalone)hasbeensetinwebpack.base.confwithanalias,importVuefrom*vue,importVueRouterfrom1vue-router'importroutesfrom?./router/index,importFastClickfrom'fastclick'importStoragefrom?store1importConfigfrom?./config/index,importstorefrom?./store/1import1./config/rem1if('addEventListener*indocument){document.addEventListener(1DOMContentLoaded',function(){FastClick.attach(document.body)})VductionTip=falseVue.use(VueRouter)constrouter=newVueRouter({routes,mode:Config.routerMode,strict:process.env.N0DE_ENV!=?production*fscrollBehavior(to,from,savedPosition){if(savedPosition){returnsavedPosition}else{if(from.meta.keepAlive){from.meta.savedPosition=document.body.scrollTop)return{x:0,y:to.meta.savedPosition||0}}>
dI-沖&-X J 仆k6xo/d?5%/空"vp*uGxo/df/wj^vjxapuix9pvi"99印/四*uv)t5刃”一心3}/MOI^VOO){叩/WS/JUWI/Q.OOJ}g031\U。/八ty/v?M0RD20)f/wjv/x^pwxapuj用力皿川/川皿/j。。/fW。),力。5。5'弓3 2W17VO2/U35f08M鄧!))J3ZJ95############MWM#############}d*############基園訓苴#############ujo3,inosos,piue//:duq:/狗s目.Peaj(############曷國訓苴#############(fvJUWi6o/5S2"l?/Xvfj6u/56q/?uvvi/6。廠552%V{f型2/qJWJVfXapu,/}”嗎〃ty@U0R8。][1?W2vp5'O^OJ^j-p^pJVPAJO^-X /叩功VWkGxO/d□ojrp9pjv/v\joj~)Tppv~fi^ojdfjoj-p^pjvMJoj-x/卯ba"-"/*。//
Branch:master-react-antd/src/router/route.jsxOsosout引入百度圖我、修改webpack配置1contributor139lines(122sloe)4.27KB/4疑惑一:*ReactcreateClass疑惑一:*ReactcreateClass和extendsReact.Coyv\poM^t有什么區(qū)別?*之前寫法:letapp=React.createClass([?ReactcreateClass和extendsReact.Component有什么區(qū)別??之前寫法:*letapp=React?createClass({?getlnitialState:function(){? //something? }?})*ES6寫法(通過es6類的繼承實現(xiàn)時state的初始化要在constructor中聲明):*classexamplecomponentextendsReact.Component{? constructor(props){? super(props);* this.state={example:?example,}TOC\o"1-5"\h\z? }?}*/importReact,{Component,PropTypes}from?react1;//react核心import{Router,Route,Redirect,IndexRoute,browserHistory,hashHistory}froi2importConfigfrom1../config/index1;importlayoutfrom1?./component/layout/layout1;//布局界面23importloginfrom?../containers/login/login*;//fl1錄界面
getlnitialState:f(AMtion(){//soMething}1)ES6寫法(通過es6類的繼承實現(xiàn)時state的初始化要在constructor中聲明):classexai^pleCoi^poM^textendsReact.Coi^poM^t{construetorfprops){super(props);tkisstate-{example:'example1]* )*)*/importReact,[Coi^poM^tjPropTypes}froha'reacts//react核心、import(Router^Route,Redirectj伍dexRou七e,bfowse/Histo嗎,hashHistory}frohA1react-router1;//創(chuàng)建route所@c/assRoots*@exte八ds{Coi^poMnt}importConfigfrow’../config/i八4ex';@c/assRoots*@exte八ds{Coi^poMnt}importlogicfroka'../co^taiMrs/logi^/logi^1;//:)」《界面/★★/classRootsextendsCom?。nent(*(路由根目錄組件,顯示當前符合條件的組件)render(){//這個組件是一個包裹組件,所有的路由跳轉的頁面都會以痂4)"。眸沙血七八的形式加載到本組件下return(<div>{p^.ckildre^</div>);))//consthisto/g=pscess.e八v.NODE_ENV/=='production1?bro\A/serHistory:ka$Mi$tory;//快速入門consthowe=(location,do)=>{re^u/re.ensureff],require=>{cb^ulljrequire(,../contaiMrs/hoi^e/ho^eliadexl).default))//百度圖表-折線圖constchartUM=(location,do)=>{requi/e.ens〃re(口,require=>{ct(nu(Gredjuiref../contaiMr^/charts/liMS^.default)},'chartUM');}//基礎組件-按鈕constbutton-(location,cb)=>{require.ei^sure(1]jrequire=>{cb(^ulljrequire(,../contaiMrs/geMral/buttonlk\dex,).default)'button');1//基礎組件-圖標consticon=(location,cb)=>{re^u/re.ensureff],require=>{cb(八川Lrequire(,../contaiMrs/gcMral/ico^l^dex').default)}JicorC);)//用戶管理constuser=(locatio^jcb)=>{requiw.e八sure(0require=>{cb(nulljrequireC../contaiMrs/user/userlnde^ydefault)}J〃seL);)//系統(tǒng)設置constsetting=(location,cb)=>{require.ensuredJjrequire=>{c優(yōu)八川。require(l../co^taiMrs/setting/settii^glndex,).default)'setting');}//廣告管理constadver=(location,cb)->{reiju/re.ensureff],require=>{cb(nulljrecjui^e(,../contaiMrs/adver/adverliadex,).default^)},Wver1);)//組件constoiaeui=(locatioi^jcb)=>{requfre.ensureft],require=>{cb(^ulljrequire(,../contaiMrs/ui/oMliadex,).defauli)}j'oMui');}//組件,co八sttwouf=(location,cb)=>{re^u/re.ensure([]?require=>{cb?川。require(,../co^taiMrs/ui/t\A/olndex').default)}j't\A/oui');)//登錄驗證constre^u/reAuth=(nextSt^te,replace)=>{lettoken=?ewDate(y).getTi^O-Config.localltekv\(,USER_AUTHORIZATION,);if(token>7200000){//模擬Token保存2個小時trep(ace({pathiaai^e:'/logi^jstate:[nextPathnakvxe:MxtState.location.patkiaai^e>}});}}constRouteCoiafig=(<Routerhistory={browserHistory)>〈Routepath='7ho^e"cokv\poM^t-{layout]。八E八ter={requiKeAutk}>〈次dexRoutegetCokvxp。八e八七二{honae}onEnter={re6ju/reAuth}/>//默認加載的組件,比如訪問www.test.con/b會自動跳轉到www.test.conVhokne〈Routepath="/〃omc"getCoi<v\poMiat={ko^e}onEHter={requ/reAut/i}/><Routep?tk="/chart/1i八e"getCoi^poMiat={chartLiM]OHEnter={re^u/reAuth)/><Routepath="/geMra1/button"getCoi^poM^t-{butto^}(mE八ter={requi%Aug}/><Routepath="/geneiral/ico八"getCoi^poM^t-{icoiK}on.E八七er={requ"eA〃t〃}/><Routepatk-,,/useri,getrCokwpo八e八七={userjonEEvter={requ/reAuth)/><RoutepatK="/setting"getCo^poMi^t-{settiiag]。八Entcm&equireAu聞/><Routepath^'/adve^1getCo^v\poMiat-{adver\OHEnter={requ/reAuth}/><Routepatk-"/ui/oMui"getCo^v\poMiat-{oMui]。八E八/><Routepath="/ui/t\A/ouingetCo^v\poMi^t-{t\A/oui]。八E八ter={%qu,HeAuth}/></Route><Routepath="/logi八"c。嗎?。八e八t={Roots}>//所有的訪問,都跳轉到Roots<lndexR.outecoMpone八七二{/og/'k}/>//默認加載的組件,比如訪問www.test.cok,會自動跳轉到/hoFwe</Route><Redirectfro3="*"to="/how\e"/></Router>}JQAA?S############曷四訓"#############}d中############曷國訓苴#############((?MP. >op)pi[qjpuXdQ-Apoq?:uMn>op?<JdpTAOJd/>{八noj} M<{djo^s)?ajo)sjdpjAOJd>)jdpusjst“附官■用//LX“《STI(()d)e)$)d6*ajo)s)601(aiosuo3// ri多姐息//!<?())dqTJ3sqn
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版田地出租與農業(yè)技術推廣合作合同6篇
- 二零二五年度城市綠化項目共同墊資合作簡單協(xié)議3篇
- 二零二五年度房地產開發(fā)土石方棄土處理合同9篇
- 村將土地租給已方協(xié)議合同
- 水泥買賣合同范本
- 新能源汽車租憑合同
- 2025年度個人貨運代理合同規(guī)范文本3篇
- 2025版協(xié)議離婚申請書撰寫指南:離婚協(xié)議書撰寫要點與示例9篇
- 娛樂產業(yè)居間合同樣本
- 快遞行業(yè)掛靠合作協(xié)議
- 2025-2030年中國草莓市場競爭格局及發(fā)展趨勢分析報告
- 第二章《有理數(shù)的運算》單元備課教學實錄2024-2025學年人教版數(shù)學七年級上冊
- 華為智慧園區(qū)解決方案介紹
- 奕成玻璃基板先進封裝中試線項目環(huán)評報告表
- 廣西壯族自治區(qū)房屋建筑和市政基礎設施全過程工程咨詢服務招標文件范本(2020年版)修訂版
- 人教版八年級英語上冊期末專項復習-完形填空和閱讀理解(含答案)
- 2024新版有限空間作業(yè)安全大培訓
- GB/T 44304-2024精細陶瓷室溫斷裂阻力試驗方法壓痕(IF)法
- 年度董事會工作計劃
- 《退休不褪色余熱亦生輝》學校退休教師歡送會
- 02R112拱頂油罐圖集
評論
0/150
提交評論