iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >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://www.lsjlt.com/news/79522.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue、react等单页面项目如何部署到服务器
    这篇文章主要介绍vue、react等单页面项目如何部署到服务器,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用vue做的项目本地是可以的,但部署到服务器遇到好多问题:资源找不到,直接...
    99+
    2022-10-19
  • Vue/React 项目部署到服务器后,刷新页面出现404报错
    问题描述:在本地启动项目一切正常,部署到服务器上线后出现BUG,项目刷新页面出现404。 起初以为是自己路由守卫或是token丢失问题,找了一圈终于解决了 产生原因:我们打开vue/react打包后生成的dist文件夹,可以看到只有...
    99+
    2023-09-15
    vue.js 前端 javascript
  • 如何将Vue项目部署到服务器
    这篇文章主要介绍了如何将Vue项目部署到服务器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。相信很多小伙伴在用Vue-cli安装的脚手架开发...
    99+
    2022-10-19
  • vue项目部署到云服务器
    Vue项目部署到云服务器时,您需要选择一个云服务器提供商,以便您可以轻松地管理和操作它。以下是一些建议和步骤: 了解云服务器提供商提供的产品和服务:选择一个适合您需求的产品和服务,以确保您的项目成功部署。您可以咨询该云服务器提供商的客服...
    99+
    2023-10-26
    服务器 项目 vue
  • vue项目部署到阿里云服务器
    如果您要将 Vue 项目部署到阿里云服务器,可以按照以下步骤进行: 选择云服务器:在使用 Vue 时,需要选择使用 Azure 等云服务器,以便将项目部署到云上。可以在阿里云官网上选择相应的云服务器或租用云服务器。 创建项目:在创建项目...
    99+
    2023-10-26
    阿里 服务器 项目
  • vue项目部署到腾讯云服务器
    Vue项目部署到腾讯云服务器时,您需要提供一个Vue项目的URL,以及一个Vue项目配置文件,例如Vue.Vueconfig.xml文件,用于在部署前配置项目所需的数据库和配置文件。以下是您需要注意的一些事项: URL:Vue项目的UR...
    99+
    2023-10-26
    腾讯 服务器 项目
  • 如何部署项目到云服务器上
    要将项目部署到云服务器上,可以按照以下步骤进行操作:1. 选择云服务提供商:根据项目需求和预算,选择适合的云服务提供商。2. 创建云...
    99+
    2023-09-16
    云服务器
  • vue项目部署云服务器宝塔面板
    Vue项目部署云服务器宝塔面板的方法如下: 安装Vue组件 要将Vue组件安装到您的项目中,需要按照以下步骤操作: 打开Vue官方网站,然后在网站上搜索“Vue项目”并找到相应的“Vue 项目”。 在Vue组件页面下,找到要安装的v...
    99+
    2023-10-27
    宝塔 面板 服务器
  • 怎么将项目部署到云服务器上面
    将项目部署到云服务器上面,可以按照以下步骤进行操作:1. 选择云服务提供商:首先需要选择一个云服务提供商,根据项目需求和预算选择适合...
    99+
    2023-09-27
    云服务器
  • Vue-cli如何创建项目从单页面到多页面
    这篇文章给大家分享的是有关Vue-cli如何创建项目从单页面到多页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。对于某些项目来说,单页面不能很好的满足需求,所以需要将vue-c...
    99+
    2022-10-19
  • 如何把vue项目部署服务器(宝塔面板)上
    一,vue项目打包 首先我们把准备好的vue项目进行打包: 输入命令:npm run build    生成dist文件   二、进入宝塔管理界面,点击网站,然后点击添加站点  三。按下面输入  点设置 四。 输入好点添加,注意!!!t...
    99+
    2023-08-31
    vue.js javascript 前端
  • Vue项目服务器部署刷新页面404问题及解决
    目录Vue服务器部署刷新页面404问题描述原因解决方法vue项目刷新界面出现404,正常点击跳转没问题Vue服务器部署刷新页面404 问题描述 在上线vue开发的前端网页部署在服务器...
    99+
    2022-11-13
  • 如何部署SpringBoot项目到云服务器上
    这篇文章主要介绍“如何部署SpringBoot项目到云服务器上”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何部署SpringBoot项目到云服务器上”文章能帮助大家解决问题。一、设置 Maven...
    99+
    2023-07-06
  • 如何把python项目部署到linux服务器
    最近用python写了个外挂,需要部署到linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是Mac系统,virtu...
    99+
    2022-06-04
    python 项目 部署 linux服务器
  • 项目如何部署到阿里云服务器
    部署到阿里云服务器的具体方法可能因您的需求和情况而异,以下是一些可能需要考虑的步骤: 选择您的云平台和应用程序,选择您想要部署的应用程序和服务。例如,您可能会选择将您的数据存储在阿里云服务器上,或将应用程序部署到阿里云服务器中。 选择云...
    99+
    2023-10-27
    阿里 服务器 项目
  • 项目发布部署:如何发布.NETCore项目到IIS服务器?
    前言:本文将详细介绍如何发布.NET Core项目到IIS服务器。首先,第一步需要安装IIS,介绍了在本地电脑和服务器中进行安装。然后需要安装SDK和运行时才能发布.NETCore项目。其次介绍了如何发布.NETCore项目和Vue项目...
    99+
    2023-10-24
    服务器
  • 如何把php项目部署到云服务器上
    在linux系统云服务器中部署php项目的方法首先,远程登录云服务器,进入云服务器操作界面;在linux系统中使用命令:yum install php php-devel 安装php;安装完成后,需使用命令:yum install php-...
    99+
    2022-10-25
  • 前端如何将项目部署到服务器(Nginx)
    文章目录 一、准备环境二、安装Nginx1、 安装Nginx依赖2、下载Nginx3、解压下载好的Nginx 压缩包4、编译安装Nginx5、启动Nginx服务 三、操作步骤1、使用Xshell连接服务器2、上传静态资源文件3、...
    99+
    2023-08-21
    nginx 服务器 前端 vue.js npm
  • 云服务器如何部署项目
    云服务器部署项目的步骤如下:1. 购买云服务器:选择一个可靠的云服务提供商,注册账号并购买适合项目需求的云服务器实例。2. 安装操作...
    99+
    2023-09-25
    云服务器
  • 简单尝试将go项目用宝塔部署到服务器
    最近写了一个go项目的小demo打算放到服务器上,但是中间遇到一些问题,这里我记录下: 一、找一个文件夹将打包后的go项目放进去,如图 注意:如果项目中需要加载一些配置文件,由于打包后只有一个exe文件,需要手动将配置文件放到目录下,具体路...
    99+
    2023-09-09
    golang
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作