Vue 项目hash和history模式打包部署与服务器配置

本文主要是介绍Vue 项目hash和history模式打包部署与服务器配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你好,我是沐爸,欢迎点赞、收藏、评论和关注。

在开发 Vue 项目时,Vue Router 提供了两种模式来创建单页面应用(SPA)的 URL:hash 模式和 history 模式。

简单说下两者的主要区别:

  • hash 模式下的 URL 看起来不那么美观,带有一个 # 符号。在这种模式下,URL 中的 hash 值(# 后面的部分)会改变,但页面不会重新加载。因为不会向服务器发送请求,服务器不需要额外配置。

  • history 模式的 URL 看起来更美观,没有 # 号。history 模式需要服务器配置,因为当用户直接访问 /foo 这样的 URL 时,或者刷新这样的 URL 时,会向服务器发送请求,服务器要能返回一个正确的页面(通常是应用的首页)。

对于这两种模式,在 Vue 项目中,我们该怎么进行配置和打包?部署到服务器时,服务器应该怎么配置呢?今天我们以 Vue2 项目部署到 Nginx 服务器为例玩一玩。

一、前置条件

  1. 下载 Nginx,官网地址:https://nginx.org/en/download.html
  2. 新运行一个 Vue2 项目,并将下面的代码片段拷贝到项目中

代码片段

src/App.vue
<template><div id="app"><ul><li><router-link to="/">home</router-link></li><li><router-link to="/page1">page1</router-link></li><li><router-link to="/page2">page2</router-link></li></ul><router-view></router-view></div>
</template>
src/main.js
import Vue from "vue";
import App from "./App.vue";
import VueRouter from "vue-router";
import HomePage from "./views/HomePage.vue";
import CommonPage1 from "./views/CommonPage1.vue";
import CommonPage2 from "./views/CommonPage2.vue";Vue.use(VueRouter);
Vue.config.productionTip = false;const routes = [{ path: "/", component: HomePage },{ path: "/page1", component: CommonPage1 },{ path: "/page2", component: CommonPage2 },
];const router = new VueRouter({routes,
});new Vue({render: (h) => h(App),router,
}).$mount("#app");
页面
<!-- views/HomePage.vue -->
<template><div>home</div>
</template><!-- views/CommonPage1.vue -->
<template><div>page1</div>
</template><!-- views/CommonPage2.vue -->
<template><div>page2</div>
</template>

二、Hash 模式

根据应用的部署位置,可以将应用分为直接访问和按路径访问。

  • 直接访问:应用被部署在一个域名的根路径上,访问形式 http://www.my-app.com/#/
  • 按路径访问:应用被部署在一个子路劲上,访问形式 http://www.my-app.com/vue2/#/

直接访问

执行npm run build,将 dist 目录下的所有文件拷贝到 html 目录下,修改 nginx.conf 配置:

http {server {listen       8000;server_name  localhost;location / {root   html;index  index.html index.htm;try_files $uri $uri/ /index.html;}}
}

注意,默认端口为 80,页面访问时会自动省略端口号,如果 80 端口被占用,要么关闭使用 80 端口的应用程序,要么使用其他端口号。

同时要注意,修改 nginx.conf 后一定要重启 Nginx !!!如果通过命令不能重启 Nginx,可以通过 “任务管理器” 进行重启。

效果预览:
在这里插入图片描述

按路径访问

  1. 修改 vue.config.js 文件
const { defineConfig } = require('@vue/cli-service') module.exports =
defineConfig({ transpileDependencies: true, publicPath: './' // 使用相对路径 })
  1. 将打包后的 dist 目录的名称改为 ‘vue2’,拷贝到 nginx/html 目录下。

  2. 修改 nginx.conf 配置

http {server {listen       8000;server_name  localhost;location / {root   html;index  index.html index.htm;try_files $uri $uri/ /index.html;}location /vue2 {root   html/;index  index.html index.htm;try_files $uri $uri/ /index.html;}}
}

效果预览
在这里插入图片描述

三、History 模式

直接访问

  1. 将路由模式改为 history
// main.jsconst router = new VueRouter({mode: "history",routes,
});
  1. 其他操作与 hash 模式下的 “直接访问” 一致,直接拷贝过来。

执行npm run build,将 dist 目录下的所有文件拷贝到 html 目录下,修改 nginx.conf 配置:

http {server {listen       8000;server_name  localhost;location / {root   html;index  index.html index.htm;try_files $uri $uri/ /index.html;}}
}

效果预览
在这里插入图片描述

按路径访问

  1. 将路由模式改为 history,并设置 base/vue2/
// main.jsconst router = new VueRouter({mode: "history",base: '/vue2/'routes
});
  1. 修改 vue.config.js 文件
const { defineConfig } = require('@vue/cli-service') module.exports =
defineConfig({ transpileDependencies: true, publicPath: '/vue2/' //
路径名称要与路由中的 base 保持一致! })
  1. 将打包后的 dist 目录的名称改为 ‘vue2’,拷贝到 nginx/html 目录下。

  2. 修改 nginx.conf 配置

http {server {listen       8000;server_name  localhost;location / {root   html;index  index.html index.htm;try_files $uri $uri/ /index.html;}location /vue2 {root   html/;index  index.html index.htm;try_files $uri $uri/ /vue2/index.html;}}
}

上面的设置中,/vue2/index.html 中的 /vue2 很关键,如果没有添加,除了 / 路径,其他子路由刷新会报 500 错误。

效果预览
在这里插入图片描述

好了,分享结束,谢谢点赞,下期再见。

这篇关于Vue 项目hash和history模式打包部署与服务器配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143655

相关文章

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情