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

相关文章

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

SpringBoot改造MCP服务器的详细说明(StreamableHTTP 类型)

《SpringBoot改造MCP服务器的详细说明(StreamableHTTP类型)》本文介绍了SpringBoot如何实现MCPStreamableHTTP服务器,并且使用CherryStudio... 目录SpringBoot改造MCP服务器(StreamableHTTP)1 项目说明2 使用说明2.1

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

RabbitMQ消息总线方式刷新配置服务全过程

《RabbitMQ消息总线方式刷新配置服务全过程》SpringCloudBus通过消息总线与MQ实现微服务配置统一刷新,结合GitWebhooks自动触发更新,避免手动重启,提升效率与可靠性,适用于配... 目录前言介绍环境准备代码示例测试验证总结前言介绍在微服务架构中,为了更方便的向微服务实例广播消息,

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例