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

news2024/11/15 10:25:51

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

在开发 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.js

const 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.js

const 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 错误。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2111367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024 年高教社杯全国大学生数学建模竞赛B题—生产过程中的决策问题(讲解+代码+成品论文助攻)

2024数学建模国赛选题建议团队助攻资料-CSDN博客https://blog.csdn.net/qq_41489047/article/details/141925859本次国赛white学长团队选择的是比较擅长的BC题&#xff0c;选题建议和助攻资料可参见上面这篇博文&#xff0c;本篇博文主要介绍B题—生产过程中的决策问题&#xf…

反转二叉树(递归非递归解决)

给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 方法一&#xff1a;递归解法 递归是处理树结构问题的常用方式&#xff0c;二叉树的问题通…

【RLHF】浅谈ChatGPT 等大模型中的RLHF算法

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​个人主页:有梦想的程序星空​个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰…

生成tekton dashboard

我们在之前的&#xff08;安装和构建ci&#xff09;实践中&#xff0c;用到都是tekton cli&#xff0c;查看ci执行情况都是通过logs&#xff0c;不是很友好。 tekton dashboard提供了很多的ui界面。这里我们来安装并使用。 1. 创建dashboard.yaml apiVersion: v1 kind: Names…

[Deepin] Deepin 安装 MEGA

下载debian包 wget https://mega.nz/linux/repo/Debian_12/amd64/megasync-Debian_12_amd64.deb注意&#xff0c;因文章过时等原因&#xff0c;请去官网下载最新包 https://mega.io/zh-hans/desktop#download 模拟安装 下载后执行命令 udo apt install --simulate ./megasy…

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接&#xff1a;Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面&#xff1a; contest-37054-zh.pdf (codeforces.com) G. Path 链接&#xff1a; Problem - G - Codeforces 中文题面 测试…

【Hadoop|HDFS篇】NameNode和SecondaryNameNode

1. NN和2NN的工作机制 思考&#xff1a;NameNode中的元数据是存储在哪里的&#xff1f; 首先&#xff0c;我们做个假设&#xff0c;如果存储在NameNode节点的磁盘中&#xff0c;因为经常需要进行随机访 问&#xff0c;还有响应客户请求&#xff0c;必然是效率过低。因此&…

Java面试题——第五篇(Java基础)

1. main方法为什么是静态的&#xff0c;能不能改为非静态的 由于JVM在运行Java应用程序的时候&#xff0c;首先会调用main方法&#xff0c;调用时不实例化这个类的对象&#xff0c;而是通过类名直接调用因此需要限制为public static。 不能改为非静态&#xff0c;main方法必须声…

JavaWeb - Mybatis - 基础操作

删除Delete 接口方法&#xff1a; Mapper public interface EmpMapper { //Delete("delete from emp where id 17") //public void delete(); //以上delete操作的SQL语句中的id值写成固定的17&#xff0c;就表示只能删除id17的用户数据 //SQL语句中的id值不能写成…

美妆行业的画册电子版如何制作?

美妆行业的画册电子版制作&#xff0c;首先要确立画册的主题和内容。针对美妆行业特点&#xff0c;可以展示产品系列、护肤理念、品牌故事、用户评价等内容。同时&#xff0c;为了吸引目标受众&#xff0c;需要注重画面美观和时尚感&#xff0c;突出产品特点和品牌形象。 在选择…

如何快速理解网络编程

目录 前言 一、网络编程的概念 二、TCP/IP架构体系的各层作用 三、网络通信中常用的专业术语 四、IP地址的分类和划分 前言 在一个主机中&#xff0c;我们能进行进程间通信&#xff0c;但是随这时代发展&#xff0c;我们不可能只是在单独的一个主机中传输数据&#xff0c;&…

H3C SR-MPLS通过OSPF通告SID配置

首先在配置前理解几个基本概念 Prefix SID配置 统一分配和配置&#xff08;全局规划&#xff09;loopback和prefix sidPrefix SIDSRGB Base&#xff08;16000&#xff09;index Adj SID自动生成 对应SR节点间的互联链路SR节点本地标识&#xff0c;从设备本地Segment池中动态…

观趋势 谋发展 2024 SSHT上海智能家居展有哪些创新呈现?

引言&#xff1a;大数跨境发布的《2024全球智能家居市场洞察报告》显示&#xff0c;智能家居市场正迎来快速增长&#xff0c;预计从2024年的1215.9亿美元增长至2032年的6332.0亿美元&#xff0c;复合年增长率为22.9%。 近年来&#xff0c;随着物联网、AI等底层技术的飞速进步&…

I/O管理【上】

目录 一. I/O设备的概念与分类二. I/O控制器(考的频率不高&#xff0c;但还是要有印象)三. I/O控制方式&#xff08;重要考点&#xff09;3.1 程序直接控制方式3.2 中断驱动方式3.3 DMA方式3.4 通道控制方式 四. I/O软件层次结构4.1用户层软件4.2 设备独立性软件4.3 设备驱动程…

摩博会前瞻:OneOS智能超高安全性彩屏,百元级价格,高性能骑行新选择!

引言 中国国际摩托车博览会即将启动&#xff01;倒计时7天&#xff0c;OneOS与恒石智能联合打造的十几款智能彩屏仪表首次展出&#xff01;十几款彩屏仪表由国产HMI芯片Model系列驱动&#xff0c;OneOS实时操作系统&#xff0c;100%国产自主设计&#xff0c;实现百元级超高安全…

DP(Display Port)

DP&#xff08;Display Port&#xff09; 一、DP简介 DisplayPort是由美国视频电子协会&#xff08;VESA&#xff1a;Video Electronics Standards Association&#xff09;在2006年5月提出的一种新型数字显示接口规范&#xff0c;主要用于源端和设备端&#xff08;如电脑显示…

虚拟机中使用gparted扩展硬盘容量

步骤1&#xff1a;安装gparted apt-get install gparted 步骤2&#xff1a;关闭虚拟机&#xff0c;扩展硬盘容量 步骤3&#xff1a;开启虚拟机&#xff0c;找到gparted软件&#xff0c;双击 步骤4&#xff1a;扩展&#xff0c;点击原磁盘&#xff0c;点击扩展&#xff0c;点击保…

深度学习(十一)-PaddlePaddle

PaddlePaddle PaddlePaddle&#xff08;Parallel Distributed Deep Learning&#xff0c;中文名飞桨&#xff09; 是百度公司推出的开源、易学习、易使用的分布式深度学习平台 源于产业实践&#xff0c;在实际中有着优异表现 支持多种机器学习经典模型 优点 易用性。语法简…

网页时装购物系统:Spring Boot框架的创新设计

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对时装购物系统方面的要求也在不断提高&#xff0c;喜欢购物的人数更是不断增加&#xff0c;使得时装购物系统的开发成为必需而且紧迫的…

搭建线上虚拟展厅,需要哪些技术?

搭建虚拟展厅需要一系列先进的技术支持&#xff0c;以确保能够为用户提供逼真、生动、互动的参观体验。以下是搭建虚拟展厅所需的主要技术&#xff1a; 1. 三维建模与渲染技术 三维建模&#xff1a;利用三维建模软件&#xff08;如Maya、3D MAX、Blender等&#xff09;建造三维…