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

相关文章

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

mysql8.0.43使用InnoDB Cluster配置主从复制

《mysql8.0.43使用InnoDBCluster配置主从复制》本文主要介绍了mysql8.0.43使用InnoDBCluster配置主从复制,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录1、配置Hosts解析(所有服务器都要执行)2、安装mysql shell(所有服务器都要执行)3、

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

通过React实现页面的无限滚动效果

《通过React实现页面的无限滚动效果》今天我们来聊聊无限滚动这个现代Web开发中不可或缺的技术,无论你是刷微博、逛知乎还是看脚本,无限滚动都已经渗透到我们日常的浏览体验中,那么,如何优雅地实现它呢?... 目录1. 早期的解决方案2. 交叉观察者:IntersectionObserver2.1 Inter

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v