vue、react等单页面项目应该这样子部署到服务器_第1页
vue、react等单页面项目应该这样子部署到服务器_第2页
vue、react等单页面项目应该这样子部署到服务器_第3页
vue、react等单页面项目应该这样子部署到服务器_第4页
vue、react等单页面项目应该这样子部署到服务器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

服务端渲染:next,js、nuxl.js等服务端泊染框架构建的项II部署到服务器,并用PM2守护程序最近好多伙伴说,我用vue做的项目本地是可以的,但部署到服务器遇到好多问题:个源找不到,立接访问MdexAt3/页向空白,刷新当前路由404。。。用react做的项目也同样遇到类似问题。现在我们一起讨论下单页面如何部署到服务器?由于前端路由缘故,单页面应用应该放到nginx或者apache、tomcat等web代理服务器中,千万不要直接访问index.htmL同时要根据自己服务器的项目路径更改react或vue的路由地址。如果说项目是直接跟在域名后面的,比如:http:〃,根路由就是7。如果说项目是直接跟在域名后面的一个子目录中的,比$n:/children,根路由就是'/children不能直接访问index.htmlo以配置Nginx为例,配置过程大致如下:(假设:1、项目文件目录:/mnt/html/spa(spa目录下的文件就是执行了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模式的项目没有配置上述内容,会出现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有什么区别?*之前写法:letapp=React.createClass([♦ReactcreateClass和extendsReact.Component有什么区别?♦之前写法:*letapp=React•createClass({♦getlnitialState:function(){♦ //something♦ }♦})*ES6写法(通过es6类的继承实现时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类的继承实现时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;//创建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);)//系统设置constsetting=(location,cb)=>{require.ensuredJjrequire=>{c优八川。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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论