Vue CLI 设置 publicPath:打包后的应用可部署在任意路径

前言

领导要重新部署多个应用环境,且不受路径层级影响。
于是找到了 Vue CLI 配置 publicpath

配置说明

下图所示:

  1. '/' :默认值,应用部署在根路径上;
  2. './':注意前面加了一个点,应用可部署在任意路径上。因为 . 点代表相对路径
  3. '':空字符串,同 2 是一个意思,代表相对路径。接着往下看就知道为啥可为空字符串
    在这里插入图片描述

打包

图左侧:相对路径,可部署在任意路径下。不带前缀,这就是为啥设置为空同样可行;
图右侧:绝对路径,只能在路径下,否则找不到相关文件;
在这里插入图片描述

总结

请仔细查看上图,一切尽在图中!强烈建议自己动手实践,会有更深刻的认知~

扩展

1. router 限制

Vue CLI 配置 publicpath下还有一段黄色标注。

  1. Vue Router mode,为 history 无效,建议使用默认值 hash
  2. 多应用暂没使用,此处不赘述;
    在这里插入图片描述

2. 与配置 outputDir 关联关系

注意还有一个配置 outputDir,不要弄混淆了!!
outputDir 的默认值是 dist 。打包生成的文件放在 Vue工程 根目录下,文件夹名称就是 dist
在这里插入图片描述

配置一

  • 默认值,无需配置;
  • 应用必须部署在根路径下;
  • 打包后的文件在 Vue工程 根目录文件夹 dist 下;
module.exports = {publicPath: '/', // 注意这里没有点 .outputDir: 'dist' // 注意结尾无 /
}

配置二

module.exports = {publicPath: './', // 注意这里多个点 .outputDir: 'dist/route/test' // 注意结尾无 /
}
  • publicPath 值开头是 ./ ,说明可部署任意路径下;
  • publicPath 值结尾是 / ,表示某路径下outputDir 值结尾没有 / ,说明是文件夹名称
  • 打包后的文件在Vue 工程dist/route/test下;
    在这里插入图片描述
    dist 文件夹下的文件放入部署环境,打开是 route/test/index.html
    在这里插入图片描述
  • 将部署路径 route/ 改为 route2/同样能访问,只要 publicPath任意路径就行;
  • /route/test/ 下的文件放在其它路径下,url 路径名称对应也可访问;
  • outputDir 仅仅是打包后的文件存放路径,与部署路径无关
    在这里插入图片描述

配置三

module.exports = {publicPath: '/route/test/', // 注意这里没有点 .outputDir: 'dist/route/test' // 注意结尾无 /
}
  • publicPath 值开头是 / ,这就限制了部署路径,必须在部署环境的根路径 /route/test 文件夹下;
  • publicPath 值结尾是 / ,表示某路径下outputDir 值结尾没有 / ,说明是文件夹名称
  • 打包后的文件在Vue 工程dist/route/test下;
    在这里插入图片描述
    部署环境下打开是 route/test/index.html
    在这里插入图片描述
  • 将部署路径 route/ 改为 route2/只能访问 index.html,相关文件就报 404
  • 例如 test.js ,它被限制在部署环境根路径 /route/test/ 下,/route2/test/ 就找不到;
  • outputDir 仅仅是打包后的文件存放路径,与部署路径无关

在这里插入图片描述

配置四

module.exports = {publicPath: './route/test/', // 注意这里多个点 .outputDir: 'dist/route/test' // 注意结尾无 /
}
  • publicPath 值开头是 ./ ,说明可部署任意路径下的 /route/test/ 下;

  • publicPath 值结尾是 / ,表示某路径下outputDir 值结尾没有 / ,说明是文件夹名称

  • 打包后的文件在Vue 工程dist/route/test下;
    在这里插入图片描述

  • 部署环境下打开是 route/test/index.html

  • 但只能访问 index.html,相关文件就报 404,;

  • 例如 test.js ,套了两层 route/test/,第一层 route/test/是部署路径,第二次是配置的 publicPath 路径;

  • 正确配置参考二和三,但建议使用配置三(有限制),推荐配置二;

  • outputDir 仅仅是打包后的文件存放路径,与部署路径无关
    在这里插入图片描述

3. index.html 引入静态文件

讲到这里,我们已经深刻的理解,想要应用部署在任意路径下,开头必须是 ./空字符串。同理,index.html 文件中引入的静态文件路径是:

// 正确
<script src="./tree.js"></script>// 正确
<script src="tree.js"></script>// 正确,参考https://cli.vuejs.org/zh/guide/html-and-static-assets.html#public-%E6%96%87%E4%BB%B6%E5%A4%B9
<script src="<%= BASE_URL %>tree.js"></script>// 应用部署在非根路径下,错误,已限制在根路径下
<script src="/tree.js"></script>

报错,当前应用在 dist 文件夹下找不到。tree.js限制在根路径。
在这里插入图片描述

4. img 标签的图片引用

这里仅说明放在 public 文件夹下的图片在 img 标签中的使用。多说一句, 打包后的public 文件夹文件仅仅是拷贝到默认 dist 目录下。与打包后 src/assets 文件夹下的图片被编译是不同的。
同理,

// 正确
<img class="user-icon" src="./static/images/login.png" />// 正确
<img class="user-icon" src="static/images/login.png" />// 错误:应用部署在非根路径下是找不到的,已限制在根路径下
<img class="user-icon" src="/static/images/login.png" />

5. background-image url 图片引用

同样,这里仅说明放在 public 文件夹下的图片在 background-image url 中的使用。
我们是可以使用 src/assets 文件夹下的图片,但有时就是有用 public 文件夹下图片的场景。便于运维同事,现场更换图片…

方式一

最简单的方式,除了路径有点长…应用部署在任意路径下也可行,亲测有效,哈哈哈…

// 正确:你没看错...就是这么长
background-image: url('../../../public/static/images/login.png');

以下都是错的

// 错误:在 src/static/images 路径下找图片。被webpack解析为 require(src/static/images/login.png) 动态引入
background-image: url('~@/static/images/login.png');// 错误:在 src/static/images 路径下找图片
background-image: url('/static/images/login.png');// 错误:相对路径,在当前 .vue 文件所在路径下找图片,例如文件在 src/views 下。则在 src/views/static/images 下找图片
background-image: url('./static/images/login.png');// 错误:同上
background-image: url('static/images/login.png');

最后,本小节的知识点较多,需要多多消化~可查看 Vue CLI 处理静态资源 去理解。
关于 何时使用 public 文件夹,Vue CLI 也给出了解释。下面是截图,以免你不想进入第三方链接:
在这里插入图片描述

方式二

网上也找到比较复杂的用 CSS 变量 方式,这里不赘述,可 参考;

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

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

相关文章

算法基础之扩展欧几里得算法

扩展欧几里得算法 核心思想&#xff1a;裴蜀定理 : 欧几里得算法: 辗转相除法求最大公约数 传入参数(int a,int b,int &x,int &y) 递归(int b,int a%b,int y,int x) xy换位置 方便计算(推公式) #include<iostream>#include<algorithm>using namespac…

yolo-nas无人机高空红外热数据小目标检测(教程+代码)

前言 YOLO-NAS是目前最新的YOLO目标检测模型。从一开始&#xff0c;它就在准确性方面击败了所有其他 YOLO 模型。与之前的 YOLO 模型相比&#xff0c;预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标。但是我们如何在自定义数据集上训练 YOLO NAS&#xff1f; 这将是我…

效果图云渲染是什么意思?如何渲染出照片级别的效果图?

​在当前的建筑规划、室内装修以及电影视效制作等行业内&#xff0c;制作高质量的效果图起着至关重要的作用&#xff0c;因为它能够给予观众或客户极为逼真和吸引人的视觉体验。在此篇文章中&#xff0c;我们将深入了解什么是云端效果图渲染&#xff0c;并探讨如何运用Renderbu…

MySQL 分表真的能提高查询效率?

背景 首先我们以InnoDB引擎&#xff0c;BTree 3层为例。我们需要先了解几个知识点&#xff1a;页的概念、InnoDB数据的读取方式、什么是树搜索&#xff1f;、一次查询花费的I/O次数&#xff0c;跨页查询。 页的概念 索引树的页&#xff08;page&#xff09;是指存储索引数据…

7-1 建立二叉搜索树并查找父结点(PTA - 数据结构)

按输入顺序建立二叉搜索树&#xff0c;并搜索某一结点&#xff0c;输出其父结点。 输入格式: 输入有三行&#xff1a; 第一行是n值&#xff0c;表示有n个结点&#xff1b; 第二行有n个整数&#xff0c;分别代表n个结点的数据值&#xff1b; 第三行是x&#xff0c;表示要搜索值…

Kylin基础知识点解析与应用探索

目录 学习目标&#xff1a; 学习内容&#xff1a; 学习时间&#xff1a; 学习产出&#xff1a; Kylin简介 什么是Kylin Kylin的历史和发展 Kylin在大数据领域的地位和作用 Kylin架构 Kylin的组成部分和模块 Kylin的工作原理和流程 Kylin与其他大数据组件的关系和集成 Kylin功能…

链接未来:深入理解链表数据结构(二.c语言实现带头双向循环链表)

上篇文章简述讲解了链表的基本概念并且实现了无头单向不循环链表&#xff1a;链接未来&#xff1a;深入理解链表数据结构&#xff08;一.c语言实现无头单向非循环链表&#xff09;-CSDN博客 那今天接着给大家带来带头双向循环链表的实现&#xff1a; 文章目录 一.项目文件规划…

Java商城免 费 搭 建:VR全景到SAAS,各种模式一网打尽!

一、技术选型 java开发语言&#xff1a;java是一种跨平台的编程语言&#xff0c;适用于大型企业级应用开发。使用java开发直播商城可以保证系统的稳定性和可扩展性。 spring boot框架&#xff1a;spring boot是一个快速构建spring应用的框架&#xff0c;简化了开发过程&#xf…

人工智能对网络安全的影响

技术的快速发展带来了不断增长的威胁环境&#xff0c;网络犯罪分子和恶意行为者利用我们互联世界中的漏洞。在这个数字时代&#xff0c;数据泄露和网络攻击呈上升趋势&#xff0c;仅靠传统的安全措施已经不够了。人工智能 &#xff08;AI&#xff09; 的进步彻底改变了网络安全…

LeetCode 21 合并两个有序链表

题目描述 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [],…

由浅入深走进Python异步编程【多进程】(含代码实例讲解 || multiprocessing、异步进程池、进程通信)

写在前面 从底层到第三方库&#xff0c;全面讲解python的异步编程。这节讲述的是python的多线程实现&#xff0c;纯干货&#xff0c;无概念&#xff0c;代码实例讲解。 本系列有6章左右&#xff0c;点击头像或者专栏查看更多内容&#xff0c;陆续更新&#xff0c;欢迎关注。 …

高镍正极材料湿法回收除硼树脂

#高镍正极材料湿法回收除硼树脂 锂离子电池高镍正极材料具备高能量密度&#xff0c;能够满足现有电动交通工具对于高续航里程的要求&#xff0c;是现在市场中最受青睐的正极材料之一&#xff0c;然而&#xff0c;组分中高镍含量给材料带来高容量的同时也使材料稳定性变差&#…

大模型ChatGLM下载、安装与使用

在人工智能领域&#xff0c;清华技术成果转化的公司智谱AI启动了支持中英双语的对话机器人ChatGLM内测。ChatGLM是一个初具问答和对话功能的千亿中英语言模型&#xff0c; 并针对中文进行了优化&#xff0c;现已开启邀请制内测&#xff0c;后续还会逐步扩大内测范围。 ChatGLM…

【数据结构和算法】最大连续1的个数 III

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一&#xff1a;滑动窗口 四、…

头歌—衍生密码体制

# 第1关&#xff1a;Rabin密码体制 题目描述 任务描述 Rabin密码体制是RSA密码体制的一种。 本关任务&#xff1a;使用Rabin密码体制对给定的明文进行加密。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;Rabin密码体制。 Rabin密码体制 在本关中&#x…

rk3588多模型检测部署quickrun

quickrun 是一款rk3588 rknn多模型高效高并发部署软件 软件框架 采用session思想&#xff0c;可以定义多个session满足不同模型的义务需求。比如充电桩检测&#xff0c;垃圾分类&#xff0c;悬崖检测&#xff0c;模型共用一个摄像头&#xff0c;采用yolov5的模型。 采用消息…

C语言之初识C语言

文章目录 前言一、什么是C语言二、第一个C语言程序三、数据类型四、变量&#xff0c;常量1、变量1.1 变量的命名1.2 变量的分类1.3 变量的使用1.4 变量的作用域和生命周期2、变量 五、字符串1. 概念2. 求解字符串的长度【strlen】3. 转义字符【含笔试题】 六、注释七、选择语句…

UE5 Landscape 制作GIS卫星图地形

1. 总体想法&#xff1a; 制作GIS地形&#xff0c;使用Landscaping MapBox是一个好方法&#xff0c;但是区域过大&#xff0c;会占用很多内存 https://blog.csdn.net/qq_17523181/article/details/135029614 如果采用QGis&#xff0c;导出卫星图&#xff0c;在UE5里拼合出地形…

Prometheus实战篇::什么是Exporter

欢迎各位关注下我的微信公众号:全干程序员demo 回复 “java面试” 获取[java精品面试题] 回复 “idea” 获取[idea2023最新版破解至2099年] 回复"自媒体" 获取个人自媒体笔记:玩转字节跳动平台(可以联系我催更,有时可能因为工作或者发布文章没空更新,因为笔记都是我自…