VUE中处理资源路径

在 Vue 应用中,处理资源路径分为相对路径、绝对路径以及使用 `public` 文件夹的情况。相对路径的资源会被 webpack 处理,而公共文件夹中的资源则不受处理,适合存放静态资产。使用 `public` 文件夹可以避免特定场景下的文件处理问题,例如需要固定文件名或大量动态引用。配置 `publicPath` 和在 HTML 中设置链接前缀是解决部署在非根目录时静态资源路径问题的关键。

处理资源路径

  • 相对路径:当你在 JavaScript、CSS 或 *.vue 文件中使用相对路径 (必须以 . 开头) 引用一个静态资源时,该资源将被webpack处理。

    <img alt="Vue logo" src="./assets/logo.png">
    
  • 绝对路径:如果 URL 是一个绝对路径,它会去当前服务器的静态路径(public)下去找,public文件webpack不会做任何处理,用来放静态资源
    在这里插入图片描述

    <img alt="Vue logo" src="/assets/logo.png"> //相当于localhost:8080/assets/logo.png ,去public中找assets文件
    <img alt="Vue logo" src="http://image.xx.com/logo.png">
    
  • 如果 URL 以 ~ 开头会作为一个模块请求被解析从node_modules中引用资源。

    <img src="~some-npm-package/foo.png">
    
  • 如果 URL 以 @ 开头会作为一个模块请求被解析。Vue CLI 默认会设置一个指向 src 的别名 @ 。

    import Hello from '@/components/Hello.vue'
    

何时使用 public 文件夹

通过 webpack 的处理并获得如下好处:

  • 脚本和样式表会被压缩且打包在一起,从而避免额外的网络请求。
  • 文件丢失会直接在编译时报错,而不是到了用户端才产生 404 错误。
  • 最终生成的文件名包含了内容哈希,因此你不必担心浏览器会缓存它们的老版本

如下情况考虑使用public文件夹:

  • 你需要在构建输出中指定一个固定的文件名字。
  • 你有上千个图片,需要动态引用它们的路径。
  • 有些库可能和 webpack 不兼容,除了将其用一个独立的

使用public文件夹的静态路径问题

步骤:
(1)如果你的应用没有部署在域名的根部,那么你需要为你的 URL 配置 publicPath 前缀

	// vue.config.js
	module.exports = {
	 publicPath: process.env.NODE_ENV === 'production'
	  ? '/cart/'     //在生产环境默认在根路径中加上cart作为静态文件的根路径 localhost:8080/cart/assets/logo.png
	 : '/c'        //在开发环境时静态文件的默认根路径
	}

(2)在 public/index.html 等通过 html-webpack-plugin 用作模板的 HTML 文件中,你需要通过<%= BASE_URL %> 设置链接前缀:

```
<link rel="icon" href="<%= BASE_URL %>favicon.ico"> //  localhost:8080/c/assets/favicon.ico
```

(3)在模板中使用,先向组件传入BASE_URL:

	data () {
		 return {
		  publicPath: process.env.BASE_URL
		}
	}

界面引入

	 <img :src="`${publicPath}assets/logo.png`">  //localhost:8080/c/assets/logo.png
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值