vue、react等单页面项目应该这样子部署到服务器.docx

上传人:太** 文档编号:35049271 上传时间:2022-08-20 格式:DOCX 页数:16 大小:40.07KB
返回 下载 相关 举报
vue、react等单页面项目应该这样子部署到服务器.docx_第1页
第1页 / 共16页
vue、react等单页面项目应该这样子部署到服务器.docx_第2页
第2页 / 共16页
点击查看更多>>
资源描述

《vue、react等单页面项目应该这样子部署到服务器.docx》由会员分享,可在线阅读,更多相关《vue、react等单页面项目应该这样子部署到服务器.docx(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、服务端渲染:next. js. nuxt. js等服务端渲染框架构建的项目部署到服务器,并用PM2守护程序最近好多伙伴说,我用vue做的项目本地是可以的,但部署到服务器遇到好多问 题:资源找不到,直接访问以dcx.比;恒/页面空白,刷新当前路由404。o o用react做的项目 也同样遇到类似问题。现在我们一起讨论下单页面如何部署到服务器?由于前端路由缘故,单页面应用应该放到nginx或者apache、tomcat等web代 理服务器中,千万不要直接访问index.html,同时要根据自己服务器的项目路径 更改react或vue的路由地址。如果说项目是直接跟在域名后面的,比如:http: ,根

2、路由就是 7o如果说项目是直接跟在域名后面的一个子目录中的,比如:http: ,根路由就是/children ,不能直接访问 index.htmlo以配置Nginx为例,配置过程大致如下:(假设:1、项目文件目录:/mnt/html/spa(spa目录下的文件就是执行了 npm run dist后 生成的dist目录下的文件)2、访问域名:)进入nginx.conf新增如下配置:server listen 80;serve、八spasosout.coi;rootindex Mdex.html;location 八/favicon.ico$ root /mt/k力)location / try

3、.files furi furi/ /i 八* g况心击a/Stntc:八cti。八。/ somc thing为)* ES6写法(通过es6类的继承实现时state的初始化要在contractor中声明):* class exaipleCoipoieit extends Rcact.Comp。八。t cotriACtoir(prop)* s?c / rops);thsstate = example: example*)*)Vimport React, Com?。八ent, PropTypcs frok Yeact1; / react 核心 import Router, Root%Redirec

4、t, I八dexRonte, browserHistory, story froh eact-router1; / 仓ll建 route 所需import Config owx L/co八fig/Mdex;iMport layout froix ycoipoMit/layout/layout1; / 布局界面import (ogM Fkom L/c。八taMedogi八/logM,; / 登录界面/*为(路由根目录组件,显示当前符合条件的组件)兴* class Roots* extc八ds ConA?o八c八珏关/class Roots extends C。岬。八t %八戏匕0 /这个组件是一

5、个包裹组件,所有的路由跳转的页面都会以防匕八的形式加 载到本组件下return (divthis.pn)ps.chiE 七人卜/div);)/ const history = pocess.CAV.NODE_EN/ !二二prodbictio ? browserHistory : hashHistorg;/ 快速入门 covst konAC = (location, ch) = cbull, KeqeC./c0nt4MeKS/ho3c/kokc/hdex).def4a/2)/ 百度图表-折线图 co八st ckartLiie = (location cb) = reqiAire.esurequ

6、ire = c。(八ireq认ihc(./co八taicers/chairts/(iAes).4efaL(lt)JckrtLi 八 c);)/ 基础组件-按钮 c。八st button = (location cb) = reuire.esuref, require = cb(iL(ll, KeqaeC./co八八ers/gehcrH/btto八伉dcx).dcf4a化)/ 基础组件-图标 c。八st 。八=(location, cb) = %ire.ehsure reurre = c。(八川。reqiAire(,./coitaiiaers/geeiral/icoyldexldefault)

7、Jico);)/ 用户管理 const user = (location, cb) = reqiAire.eisurequire = c。(八化 yequi匕优。./co八4以ed/aseK/aseK伉dex)def化) JseL);)/ 系统设置 const setting = (location, cb) = reqiAire.eisure(? require = c。(八Yeq(Aiye(,./c。八tai八ers/setti八g/setti八gl八dex).defabdt) , 1 setting1);/ 广告管理 const adver - (location, cb) = reqi

8、Aire.eisure(, require = cb(八川。ireq(Aire(,./coitaiers/adveir/adverlidex,ydefaiAlt) LZdvcF);)/ 组件一 co八st o八如二(location, cb) = require(j require = cbullj req认ire(/co八tai八ers/认i/o八el八Hex),Wefa认也)jo 八cr);)/ 组件二 coiriSt twoui = (location, cb = reqiAire.eiASurequire = cb(八rcq(AircC/c。八taMe匕/ui/tw。【八dcx)def

9、abdt)? twoui1);/ 登录验证 const reu/reAutM = (iextState, replace = let token = (new PateO).getTiieQ - Coifig.localltei(,USER._AUTHORlZATlON,);if(toke八 72.00000) / 模拟 Token 保存 2 个小时replace(path 八 ame/bgMLstate: 八cxtP”协八mc: nextState.Iocatioi.pathia);)co八st RobcteConfig =(Route pa协二/kohc coipoieit-layout

10、o八E八ter=rcqeA协MdcxRobctc getCok?。八c八七二kokc。八E八tc匕=reqa/rcAatk / / 默认加载的组件,比如访问会自动跳转到www.test.coi/love 。八。t=btt。八。八E八ter=KeqwrcA”网 /Route /默认加载的组件,比如访问。m会自动跳转到 Redirect frov=/*,/ 2。=/kokc / );) J222S#慕圃训苴# d中#曷训苴#(.Ajp,)adieaj39udsnop)pitqopuddde*Apoqunop 0)japuaj打即网/ L;()ams”6ao”)6o;adiosuo3 /:H-JI

11、/ 39、2S、弓。神飘M9SJ程昭果第3“法H11*181幼/Ijodurr jodurr )JOdWT IJOdmj )jodwr里里WHXWIM / f.noj/jnoj/-.出。八no “1。,丫|3 / !.ajos/ajos/xnpaj/aa w。” ajois ?PTAOdJ察if,我蚓KRxn时由CRi/ J.xnpaj-oeaj. g ( japjAOJd )囤N8I道* / J.wop-:3edjt idoj (“u N0(nx初o)sih eiueig MeyOSHMMI 4弟第fftS困QIHJaj / 鼠R。.o ( sXAidcud )guoOo3 ) I川如s“仙

12、 318”。】5 61) 3叫1 EZsjoinqij:uo9 oqPA!dqPA!dxspdde / ojs / p)ue-)oeaj joiseuj :y9uejg鹏。”。才川力叫2P 0dX2“St0 8(9;serve、八aitdsosoiAt.coiv;root /Mnt/hM(/YcactA八td;index i八dex.ktW;location 八/favic。心ic。* root /m八t/htm(/veactA八td;) location / trg_files 料H *“ri/ router;M4cx 证dcx.ktn/U;pn)xg_set_hcadeHHost$host

13、;poxg_setjxeadc 忆X-Rea(-IP$ireivote_addnpgxg_setJcadeYX -Forwarded-For *proxg_add _x_fo rwa rded_fo r;proxg_sct_kcdcrX-Forwarded -Proto 轲Mcmc;location ro(Ater rewrite 人.美$ /Sdex.htM( break;accessog /mt/ogs/hgi 八 x/ccessJog vaiia;srpeajsfanAs0e|n6uexui6uxnu!|(#慕囤训苴#Host于host;proxyX-Real-IP$reiote_add

14、npKoxg_set_headcYX-Forwarded-For * psxg_aHd _x_fo irwa rdedjo r;pg乂 g_sct_hea,wX-Forwarded -Proto 轲 cheMe;accessjog /iit/logs/igiix/acce.log注意事项:工、配置域名的话,需要80端口,成功后,只要访问域名即可访问的项目2、如果你使用了忆4比-匕。笈匕的browserHistory模式或ve-Koatcr的history模式,在八gMx配置还需要重写路由:server listen 80;serve、八 Me spasosobct.coM;root /m八/人

15、七/62;index,八dex.kt&/;location 八/faviconico$ root /n/mt/k力W/sp可location / tiry_files $ fallback;Mde乂 M&x.ktml;Host于host;proxy _set_eaderX-Real-IP$reiote_addnproxy_setReaderproxy_setReaderX-Forwarded-For * pexg_aHd _xJo irwa rded_fo r;X-Forwarded -Proto 于 scken/e;location fallback rewrite A.关,/i八dcx.k

16、tM/ hireak)accessog /恒八 t/ogs/八gi n x/“ccessog iaiia;为什么要重写路由?因为我们的项目只有一个根入口,当输入类似/k0MC的时,如果找不到对应的页面,八gi八x会尝试加载i八dex.ktnM 这是通过react-router或/ue-router就能正确的匹配我 们输入的/ko3e路由,从而显示正确的人。出。页面,如果browserHistory模式或histoirg模式的项目 没有配置上述内容,会出现404的情况。简单举两个例子,一个vue项目一个react项目:vue项目:域名:Branch: master vue-taobao / sr

17、c / router / index.jsO sosout登录拦截1 contributor47 lines (40 sloe) 1.04 KBimport App from ./App3 首页const home = r = require.ensure(, () = r(require(*./page/home/index)f home)6 /物濠const logistics = r = require.ensure(, () = r(require(./page/logistics/index1),9 /购物车const cart = r = require.ensure(, () =

18、 r(require(./page/cart/index), cart*)18 /我的const profile = r = require.ensure(, () = r(requireC1./page/profile/index1), *pr 141 s / 31而iipoirt App froh 匚/App/ 首页 co八亢 home = r = 匕四川七.0八6%(口/ () =八dex) Jkohe)/ 物流 c。八st logistics = r =()= 夕(vcq认i./pagc/1ogistics/i八de乂)logistics,)/ 贝勾物车 cost cart = r =

19、 Keqaire.e八() = 丫(requireC./pagc/cart/i八4。乂),/ 我的 cot profile = r = reqaire.e八()=keq认Mc(/page/profi(e/i八dex),profile1)/ 登录界面 coist logii = r = 小俨,匕,0八6%(口()= r(reqiKcC./p4ge/seK/ogi) J(ogi)export default patk. 7Z?component: App, /顶层路由,对应对屹x.ktMchildren: path: /homcL / 首页component: homeL(path /logist

20、ics / 物流com?。八。t: logistics,veta: logits: true)L(path: 7cart,J / 购物车coipoMiat: cart,login; true),patk /profile1, / 我的c。叫2。八c八t: profileL(path: /(ogM / 登录界面com?。八。t: (oginpath:保Lredirect: Vkoie1)2 (runtime-only or standalone) has been set in webpack.base.conf with an alias.3 import Vue from vue,impor

21、t VueRouter from vue-router,import routes from ./router/index,importFastClick from ,fastclick,6 importStorage from storeimport Config from 1./config/index7 importstore from *./store/1import./config/rem112 if (addEventListener1 in document) document.addEventListener(,DOMContentLoaded, function () 13

22、FastClick9attach(document.body)14 18Vue.config.productionTip = falseVue. use( VueRouter)22 const router = new VueRouter(23routes,24mode: Config,routerMode,25strict: != production,26scrollBehavior (to, from, savedPosition) 27if (savedPosition) 28return savedPosition29 else 30if (from.meta.keepAlive)

23、3.from.meta.savedPosition = documentbody.scrollTop3233return x: 0, y: to.meta.savedPosition | 0 3435坤d/-犷2才_ X*。阴,soh/砰 u2M ? kfixo/dfjWIJ*X9/2W xopuj印叫冈 /,以力右 P舛5刃弓54 / AOyOQO(fqj/WV/juvu/ ?。/ 本O2VO2”UJ/v AOyOQOf)A/l4“X砰列 xapwfqj/jwiw/juwi/ j。/fWI。力。SOSq? 2AAVA。8 V 邓“ J2AJ2s#层明训苴#办H#曷圃训苴#iuoD-inoso

24、s-piue/:dnq :后狗:自西Peaj(#慕囤训苴#(fwvwi6。1 5S2229/XU 旧U/s6oj/?UWI / 6oSS2gb(fy/U2/q )W4“X叩V/)型叫眄 AOyVQO(f2W12Vps本 OJOJJ- pdpjv/vjo x j?pvsfixojdfjv/vj of)r 抨 kfixo/d* joj-p?pjv/vjoj-又/吓甲钙一族。Branch: master react-antd / src / router / route.jsxP sosout引入百度图表、修改webpack配置1 contributor139 lines (122 sloe) 4.

25、27 KB* It 雇一:3 React createClass 和 extends React.Component 有什么区别?4 *之前写法:5 * let app = React.createClass(getlnitialState: function()*/ some thing8 * )* ES6写法(通过es6类的继承实现时state的初始化要在constructor中声明):9 * class examplecomponent extends React.Component *constructor(props) 10 *super(props);*this.state = e

26、xample: example*11 * 12 */import React, Component, PropTypes from 1 react1; / react核心; import Router, Route, Redirect, IndexRoute, browserHistoryf hashHistory froiimport Config from 1./config/index1;import layout from 1. ./component/layout/layout1; / 布局界面23import login from 1. ./containers/login/login,; / 登录界面*疑惑一:* React createClass 和 extends React.CoipoMit 有什么区别?*之前写法:* let app = React.createCla(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁