返回顶部
首页 > 资讯 > 服务器 >vue、react等单页面项目如何部署到服务器
  • 585
分享到

vue、react等单页面项目如何部署到服务器

2024-04-02 19:04:59 585人浏览 薄情痞子
摘要

这篇文章主要介绍Vue、React等单页面项目如何部署到服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用vue做的项目本地是可以的,但部署到服务器遇到好多问题:资源找不到,直接

这篇文章主要介绍VueReact等单页面项目如何部署到服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

用vue做的项目本地是可以的,但部署到服务器遇到好多问题:资源找不到,直接访问index.html页面空白,刷新当前路由404。。。现在我们一起讨论下单页面如何部署到服务器?

由于前端路由缘故,单页面应用应该放到Nginx或者apache、TomcatWEB代理服务器中,千万不要直接访问index.html,同时要根据自己服务器的项目路径更改react或vue的路由地址。

如果说项目是直接跟在域名后面的,比如:Http://www.sosout.com ,根路由就是 '/'。

如果说项目是直接跟在域名后面的一个子目录中的,比如:http://www.sosout.com/children ,根路由就是 '/children ',不能直接访问index.html。

以配置Nginx为例,配置过程大致如下:(假设:

1、项目文件目录: /mnt/html/spa(spa目录下的文件就是执行了npm run dist 后生成的dist目录下的文件)

2、访问域名:spa.sosout.com)

进入nginx.conf新增如下配置:

server {
  listen 80;
  server_name spa.sosout.com;
  root /mnt/html/spa;
  index index.html;
  location ~ ^/favicon\.ico$ {
    root /mnt/html/spa;
  }

  location / {
    try_files $uri $uri/ /index.html;
    proxy_set_header  Host       $host;
    proxy_set_header  X-Real-IP    $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
  }
  access_log /mnt/logs/nginx/access.log main;
}

注意事项:

1、配置域名的话,需要80端口,成功后,只要访问域名即可访问的项目

2、如果你使用了react-router的 browserHistory 模式或 vue-router的 history 模式,在nginx配置还需要重写路由:

server {
  listen 80;
  server_name spa.sosout.com;
  root /mnt/html/spa;
  index index.html;
  location ~ ^/favicon\.ico$ {
    root /mnt/html/spa;
  }

  location / {
    try_files $uri $uri/ @fallback;
    index index.html;
    proxy_set_header  Host       $host;
    proxy_set_header  X-Real-IP    $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  X-Forwarded-Proto $scheme;
  }
  location @fallback {
    rewrite ^.*$ /index.html break;
  }
  access_log /mnt/logs/nginx/access.log main;
}

为什么要重写路由?因为我们的项目只有一个根入口,当输入类似/home的url时,如果找不到对应的页面,nginx会尝试加载index.html,这是通过react-router就能正确的匹配我们输入的/home路由,从而显示正确的home页面,如果browserHistory模式或history模式的项目没有配置上述内容,会出现404的情况。

简单举两个例子,一个vue项目一个react项目:

vue项目:

域名:http://tb.sosout.com

vue、react等单页面项目如何部署到服务器

import App from '../App'
// 首页
const home = r => require.ensure([], () => r(require('../page/home/index')), 'home')
// 物流
const loGIStics = r => require.ensure([], () => r(require('../page/logistics/index')), 'logistics')
// 购物车
const cart = r => require.ensure([], () => r(require('../page/cart/index')), 'cart')
// 我的
const profile = r => require.ensure([], () => r(require('../page/profile/index')), 'profile')
// 登录界面
const login = r => require.ensure([], () => r(require('../page/user/login')), 'login')
export default [{
 path: '/',
 component: App, // 顶层路由,对应index.html
 children: [{
  path: '/home', // 首页
  component: home
 }, {
  path: '/logistics', // 物流
  component: logistics,
  meta: {
   login: true
  }
 }, {
  path: '/cart', // 购物车
  component: cart,
  meta: {
   login: true
  }
 }, {
  path: '/profile', // 我的
  component: profile
 }, {
  path: '/login', // 登录界面
  component: login
 }, {
  path: '*',
  redirect: '/home'
 }]
}]

vue、react等单页面项目如何部署到服务器

############
# 其他配置
############

http {
  ############
  # 其他配置
  ############
  server {
    listen 80;
    server_name tb.sosout.com;
    root /mnt/html/tb;
    index index.html;
    location ~ ^/favicon\.ico$ {
      root /mnt/html/tb;
    }
  
    location / {
      try_files $uri $uri/ @fallback;
      index index.html;
      proxy_set_header  Host       $host;
      proxy_set_header  X-Real-IP    $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
    }
    location @fallback {
      rewrite ^.*$ /index.html break;
    }
    access_log /mnt/logs/nginx/access.log main;
  }
  ############
  # 其他配置
  ############  
}

react项目:

域名:http://antd.sosout.com

vue、react等单页面项目如何部署到服务器



import React, {Component, PropTypes} from 'react'; // react核心
import { Router, Route, Redirect, IndexRoute, browserHistory, hashHistory } from 'react-router'; // 创建route所需
import Config from '../config/index';
import layout from '../component/layout/layout'; // 布局界面

import login from '../containers/login/login'; // 登录界面


class Roots extends Component {
  render() {
    // 这个组件是一个包裹组件,所有的路由跳转的页面都会以this.props.children的形式加载到本组件下
    return (
      <div>{this.props.children}</div>
    );
  }
}

// const history = process.env.node_ENV !== 'production' ? browserHistory : hashHistory;

// 快速入门
const home = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/home/homeIndex').default)
  }, 'home');
}

// 百度图表-折线图
const chartLine = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/charts/lines').default)
  }, 'chartLine');
}

// 基础组件-按钮
const button = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/general/buttonIndex').default)
  }, 'button');
}

// 基础组件-图标
const icon = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/general/iconIndex').default)
  }, 'icon');
}

// 用户管理
const user = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/user/userIndex').default)
  }, 'user');
}

// 系统设置
const setting = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/setting/settingIndex').default)
  }, 'setting');
}

// 广告管理
const adver = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/adver/adverIndex').default)
  }, 'adver');
}

// 组件一
const oneui = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/ui/oneIndex').default)
  }, 'oneui');
}

// 组件二
const twoui = (location, cb) => {
  require.ensure([], require => {
    cb(null, require('../containers/ui/twoIndex').default)
  }, 'twoui');
}

// 登录验证
const requireAuth = (nextState, replace) => {
  let token = (new Date()).getTime() - Config.localItem('USER_AUTHORIZATION');
  if(token > 7200000) { // 模拟Token保存2个小时
    replace({
      pathname: '/login',
      state: { nextPathname: nextState.location.pathname }
    });
  }
}

const RouteConfig = (
  <Router history={browserHistory}>
    <Route path="/home" component={layout} onEnter={requireAuth}>
      <IndexRoute getComponent={home} onEnter={requireAuth} /> // 默认加载的组件,比如访问www.test.com,会自动跳转到www.test.com/home
      <Route path="/home" getComponent={home} onEnter={requireAuth} />
      <Route path="/chart/line" getComponent={chartLine} onEnter={requireAuth} />
      <Route path="/general/button" getComponent={button} onEnter={requireAuth} />
      <Route path="/general/icon" getComponent={icon} onEnter={requireAuth} />
      <Route path="/user" getComponent={user} onEnter={requireAuth} />
      <Route path="/setting" getComponent={setting} onEnter={requireAuth} />
      <Route path="/adver" getComponent={adver} onEnter={requireAuth} />
      <Route path="/ui/oneui" getComponent={oneui} onEnter={requireAuth} />
      <Route path="/ui/twoui" getComponent={twoui} onEnter={requireAuth} />
    </Route>
    <Route path="/login" component={Roots}> // 所有的访问,都跳转到Roots
      <IndexRoute component={login} /> // 默认加载的组件,比如访问www.test.com,会自动跳转到www.test.com/home
    </Route>
    <Redirect from="*" to="/home" />
  </Router>
);

export default RouteConfig;

vue、react等单页面项目如何部署到服务器

############
# 其他配置
############

http {
  ############
  # 其他配置
  ############
  server {
    listen 80;
    server_name antd.sosout.com;
    root /mnt/html/reactAntd;
    index index.html;
    location ~ ^/favicon\.ico$ {
      root /mnt/html/reactAntd;
    }

    location / {
      try_files $uri $uri/ @router;
      index index.html;
      proxy_set_header  Host       $host;
      proxy_set_header  X-Real-IP    $remote_addr;
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
    }
    location @router {
      rewrite ^.*$ /index.html break;
    }
    access_log /mnt/logs/nginx/access.log main;
  }

  ############
  # 其他配置
  ############  
}

以上是“vue、react等单页面项目如何部署到服务器”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网服务器频道!

--结束END--

本文标题: vue、react等单页面项目如何部署到服务器

本文链接: https://lsjlt.com/news/79522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue、react等单页面项目如何部署到服务器
    这篇文章主要介绍vue、react等单页面项目如何部署到服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用vue做的项目本地是可以的,但部署到服务器遇到好多问题:资源找不到,直接...
    99+
    2024-04-02
  • Vue/React 项目部署到服务器后,刷新页面出现404报错
    问题描述:在本地启动项目一切正常,部署到服务器上线后出现BUG,项目刷新页面出现404。 起初以为是自己路由守卫或是token丢失问题,找了一圈终于解决了 产生原因:我们打开vue/react打包后生成的dist文件夹,可以看到只有...
    99+
    2023-09-15
    vue.js 前端 javascript
  • 如何将Vue项目部署到服务器
    这篇文章主要介绍了如何将Vue项目部署到服务器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。相信很多小伙伴在用Vue-cli安装的脚手架开发...
    99+
    2024-04-02
  • vue项目部署到云服务器
    Vue项目部署到云服务器时,您需要选择一个云服务器提供商,以便您可以轻松地管理和操作它。以下是一些建议和步骤: 了解云服务器提供商提供的产品和服务:选择一个适合您需求的产品和服务,以确保您的项目成功部署。您可以咨询该云服务器提供商的客服...
    99+
    2023-10-26
    服务器 项目 vue
  • django项目如何部署到服务器
    部署Django项目到服务器通常需要以下步骤: 在服务器上安装Python和Django:首先确保服务器上已安装Python和D...
    99+
    2024-05-08
    django
  • Vue-cli如何创建项目从单页面到多页面
    这篇文章给大家分享的是有关Vue-cli如何创建项目从单页面到多页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。对于某些项目来说,单页面不能很好的满足需求,所以需要将vue-c...
    99+
    2024-04-02
  • vue项目部署到阿里云服务器
    如果您要将 Vue 项目部署到阿里云服务器,可以按照以下步骤进行: 选择云服务器:在使用 Vue 时,需要选择使用 Azure 等云服务器,以便将项目部署到云上。可以在阿里云官网上选择相应的云服务器或租用云服务器。 创建项目:在创建项目...
    99+
    2023-10-26
    阿里 服务器 项目
  • vue项目部署到腾讯云服务器
    Vue项目部署到腾讯云服务器时,您需要提供一个Vue项目的URL,以及一个Vue项目配置文件,例如Vue.Vueconfig.xml文件,用于在部署前配置项目所需的数据库和配置文件。以下是您需要注意的一些事项: URL:Vue项目的UR...
    99+
    2023-10-26
    腾讯 服务器 项目
  • 如何把vue项目部署服务器(宝塔面板)上
    一,vue项目打包 首先我们把准备好的vue项目进行打包: 输入命令:npm run build    生成dist文件   二、进入宝塔管理界面,点击网站,然后点击添加站点  三。按下面输入  点设置 四。 输入好点添加,注意!!!t...
    99+
    2023-08-31
    vue.js javascript 前端
  • 如何部署项目到云服务器上
    要将项目部署到云服务器上,可以按照以下步骤进行操作:1. 选择云服务提供商:根据项目需求和预算,选择适合的云服务提供商。2. 创建云...
    99+
    2023-09-16
    云服务器
  • apache服务器部署vue项目
    随着前端开发技术的迅速发展,越来越多的静态页面项目被打包成了SPA(Single Page Application,即单页应用),而Vue.js作为其中的佼佼者,便成为了越来越多前端开发者的首选。Vue.js的部署方式有很多,其中一个比较常...
    99+
    2023-05-24
  • 云服务器部署vue项目
    Vue是一种轻量级框架,可以在Web应用程序中使用。以下是一个简单的Vue项目(示例): 安装Vue Vue可以很容易地安装在Python 2.6或更高版本上。请确保您已经安装了Python和Vue模块,以便您可以使用它来创建和运行V...
    99+
    2023-10-26
    服务器 项目 vue
  • vue项目部署云服务器宝塔面板
    Vue项目部署云服务器宝塔面板的方法如下: 安装Vue组件 要将Vue组件安装到您的项目中,需要按照以下步骤操作: 打开Vue官方网站,然后在网站上搜索“Vue项目”并找到相应的“Vue 项目”。 在Vue组件页面下,找到要安装的v...
    99+
    2023-10-27
    宝塔 面板 服务器
  • 项目部署到云服务器
    项目部署到云服务器的过程一般是先将数据从本地服务器迁移到云服务器,再将云服务器部署到项目部署环境中。这可能需要进行以下几个步骤: 数据迁移:将数据从本地服务器迁移到云服务器的过程中,需要确保所有数据都是备份的,并且需要保证数据的一致性。...
    99+
    2023-10-26
    服务器 项目
  • 如何把python项目部署到linux服务器
    最近用python写了个外挂,需要部署到linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtu...
    99+
    2022-06-04
    python 项目 部署 linux服务器
  • 如何部署SpringBoot项目到云服务器上
    这篇文章主要介绍“如何部署SpringBoot项目到云服务器上”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何部署SpringBoot项目到云服务器上”文章能帮助大家解决问题。一、设置 Maven...
    99+
    2023-07-06
  • 项目如何部署到阿里云服务器
    部署到阿里云服务器的具体方法可能因您的需求和情况而异,以下是一些可能需要考虑的步骤: 选择您的云平台和应用程序,选择您想要部署的应用程序和服务。例如,您可能会选择将您的数据存储在阿里云服务器上,或将应用程序部署到阿里云服务器中。 选择云...
    99+
    2023-10-27
    阿里 服务器 项目
  • 如何部署项目到阿里云服务器
    简介 在现代互联网时代,越来越多的企业和个人选择将项目部署到云端服务器上,以提高项目的可靠性和可扩展性。阿里云作为国内领先的云计算服务提供商,提供了丰富的云服务器产品和解决方案,可以帮助用户轻松地部署项目到阿里云服务器。步骤一:购买阿里云服...
    99+
    2024-01-18
    阿里 服务器 项目
  • 如何把java项目部署到服务器上
    要将Java项目部署到服务器上,可以按照以下步骤进行操作: 将Java项目打包成war文件或jar文件。可以使用Maven或Gr...
    99+
    2024-04-09
    java 服务器
  • Vue项目服务器部署刷新页面404问题及解决
    目录Vue服务器部署刷新页面404问题描述原因解决方法vue项目刷新界面出现404,正常点击跳转没问题Vue服务器部署刷新页面404 问题描述 在上线vue开发的前端网页部署在服务器...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作