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

news2024/9/29 19:21:53

前言

领导要重新部署多个应用环境,且不受路径层级影响。
于是找到了 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.coloradmin.cn/o/1333516.html

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

相关文章

Qt designer界面和所有组件功能的详细介绍(全!!!)

PyQt5和Qt designer的详细安装教程&#xff1a;https://blog.csdn.net/qq_43811536/article/details/135185233?spm1001.2014.3001.5501 目录 1. 界面介绍2. Widget Box 常用组件2.1 Layouts&#xff08;布局&#xff09;2.2 Spacers&#xff08;间隔器&#xff09;2.3 Item V…

代码随想录刷题题Day21

刷题的第二十一天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day21 任务 ● 216.组合总和III ● 17.电话号码的字母组合 1 组合总和III 216.组合总和III 思路&#xff1a; 在[1,2,3,4,5,6,…

P5 RV1126编码测试Demo

目录 前言 01 测试Demo大致流程图 02 代码分析 2.1 VI设备初始化 2.2 使能通道 —— RK_MPI_VI_EnableChn 2.3 VI 和 VENC绑定 2.4 创建 编码线程 前言 从本章开始我们将要学习嵌入式音视频的学习了 &#xff0c;使用的瑞芯微的开发板 &#x1f3ac; 个人主页&#xff1a…

JavaEE:CAS详解

一.什么是CAS CAS: 全称 Compare and swap &#xff0c;字面意思 :” 比较并交换 “ &#xff0c;一个 CAS 涉及到以下操作&#xff1a; 我们假设内存中的原数据V&#xff0c;旧的预期值A&#xff0c;需要修改的新值B。 我们来进行操作&#xff1a; 1. 比较 V 和 A 是否相等。…

Java多线程、线程池及线程同步(synchronized关键字、悲观锁、乐观锁)

1.进程与线程定义 进程包含线程&#xff0c;如一个百度网盘进程&#xff0c;该进程的线程可以有上传&#xff0c;下载。 2.创建线程的三种方式 方式1-继承Thread类 方式2-实现Runnabled接口 1.常规写法 2.匿名内部类写法 方式3-实现Callable接口 示例代码&#xff1a; f1.get…

WorkPlus超级APP助力企业节省IT人力成本,实现快速移动化

在信息化时代&#xff0c;移动应用已经成为企业发展的重要组成部分。然而&#xff0c;开发和维护原生客户端的成本却相对较高&#xff0c;需要大量的iOS、安卓和桌面端工程师。为了解决这一问题&#xff0c;WorkPlus作为一个功能完备的超级APP&#xff0c;为企业节约了大量的IT…

MyBatis动态sql中foreach标签介绍和使用

MyBatis动态sql中foreach标签介绍和使用 参数解释&#xff1a; foreach 的主要作用在构建 in 条件中&#xff0c;它可以在 sql 语句中进行迭代一个集合。foreach 元素的属性主要有 collection&#xff0c;item&#xff0c;separator&#xff0c;index&#xff0c;open&#x…

Github 2023-12-24 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-24统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目5Jupyter Notebook项目2C项目1C项目1Go项目1Java项目1JavaScript项目1Ruby项目1 Serverless Frame…

探索微软Edge:使用方法和心得分享

学习目标&#xff1a; 了解微软Edge的基本功能和使用方法。掌握在微软Edge上进行浏览、搜索和书签管理的技巧。学习如何使用微软Edge进行隐私和安全管理。探索微软Edge的扩展和其他高级功能。 学习内容&#xff1a; 微软Edge的简介&#xff1a;了解微软Edge的起源、特点和与其…

AI一键注释代码、阅读整个项目、转换编程语言。已开源!

获取github源码地址和国内url、key方式&#xff1a;在文章底部 大家好今天给大家介绍一款开源项目&#xff0c;这个项目是由渡码维护的&#xff0c;这个项目支持自己的大模型和使用openai两种方式&#xff0c;本文章介绍使用openai的方式&#xff01; 使用过程中发现两个问题…

如何利用flume进行日志采集

介绍 Apache Flume 是一个分布式、可靠、高可用的日志收集、聚合和传输系统。它常用于将大量日志数据从不同的源&#xff08;如Web服务器、应用程序、传感器等&#xff09;收集到中心化的存储或数据处理系统中。 基本概念 Agent&#xff08;代理&#xff09;&#xff1a; …

【JAVA面试题】什么是引用传递?什么是值传递?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 前言 博客的正文部分可以详细介绍Java中参数传递的机制&#xff0c;强调Java是按值传递的&#xff0c;并解释了基本数据类型和对象引用在这种传…

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

【BBuf的CUDA笔记】十,Linear Attention的cuda kernel实现解析

欢迎来 https://github.com/BBuf/how-to-optim-algorithm-in-cuda 踩一踩。 0x0. 问题引入 Linear Attention的论文如下&#xff1a; Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention&#xff1a;https://arxiv.org/pdf/2006.16236.pdf 。官方…

WPF中DataContext的绑定技巧-粉丝专栏

&#xff08;关注博主后&#xff0c;在“粉丝专栏”&#xff0c;可免费阅读此文&#xff09; 先看效果&#xff1a; 上面的绑定值都是我们自定义的属性&#xff0c;有了以上的提示&#xff0c;那么我们可以轻松绑定字段&#xff0c;再也不用担心错误了。附带源码。 …

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化

Python学习路线 - Python语言基础入门 - Python基础综合案例 - 数据可视化 - 地图可视化 基础地图使用基础地图演示基础地图演示 - 视觉映射器 疫情地图-国内疫情地图案例效果数据整理 疫情地图-省级疫情地图省疫情地图 基础地图使用 基础地图演示 代码示例&#xff1a; &quo…

【c++、数据结构课设】哈夫曼树

时间过的真快&#xff0c;转眼之间一个学期即将结束&#xff0c;想必这个时候大家都在准备各科的课设作业&#xff0c;本期内容是我的数据结构课设&#xff0c;希望能给大家带来帮助&#xff0c;如果有任何不足或需要改进的地方&#xff0c;欢迎各位提出宝贵的意见。 屏幕录制2…

2023年12月24日学习总结

今日to do list&#xff1a; 做kaggle上面的流量预测项目☠️ 学习时不刷手机&#x1f921; okkkkkkkkkkkkkk 开始&#x1f44d;&#x1f34e; 0、我在干什么&#xff1f; 我在预测一个名字叫做elborn基站的下行链路流量&#xff0c;用过去29天的数据预测未来10天的数据 1、…

Json和Xml

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第21章《Json和Xml》 二、Xml的介绍 Xml的含义&#xff1a; 可标记性语言&#xff0c;它将数据以一种特别简单文本格式储存。让所有人和几乎所有的计算机都能理解。 XML文件示例&#xff1a; <?xml version"1.…