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

相关文章

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

springboot的controller中如何获取applicatim.yml的配置值

《springboot的controller中如何获取applicatim.yml的配置值》本文介绍了在SpringBoot的Controller中获取application.yml配置值的四种方式,... 目录1. 使用@Value注解(最常用)application.yml 配置Controller 中

springboot中配置logback-spring.xml的方法

《springboot中配置logback-spring.xml的方法》文章介绍了如何在SpringBoot项目中配置logback-spring.xml文件来进行日志管理,包括如何定义日志输出方式、... 目录一、在src/main/resources目录下,也就是在classpath路径下创建logba

解决idea启动项目报错java: OutOfMemoryError: insufficient memory

《解决idea启动项目报错java:OutOfMemoryError:insufficientmemory》:本文主要介绍解决idea启动项目报错java:OutOfMemoryError... 目录原因:解决:总结 原因:在Java中遇到OutOfMemoryError: insufficient me

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

python项目环境切换的几种实现方式

《python项目环境切换的几种实现方式》本文主要介绍了python项目环境切换的几种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 如何在不同python项目中,安装不同的依赖2. 如何切换到不同项目的工作空间3.创建项目

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻