如何在webpack中成功引用到图片?
打包图片时,你可曾遇到在产出目录文件夹找不到图片,即便找到了,但是页面说引用不到资源?页面上或者文件中引用的图片地址不对?
一、在webpack中引入图片需要url-loader
//webpack配置
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: path.posix.join('static', 'img/[name].[hash:7].[ext]')
}
}
二、html中
1、link 标签图标
我的期望是打包出来的图标带有哈希值或者变成data:image/png;base64,打包路径也不会被修改。下面介绍两种方案,各有优劣。
方案A:配置插件
在配置文件中给html-webpack-plugin设置favicon参数,即可成功打包。
//修改webpack配置文件
const HtmlWebpackPlugin = require('html-webpack-plugin');
new HtmlWebpackPlugin({
filename: 'index.html',
template: 'index.html',
inject: true,
favicon: 'src/static/img/logo.png',
minify: {
removeComments: true,
collapseWhitespace: true,
removeAttributeQuotes: true
},
chunksSortMode: 'dependency'
})
「优势」:方便快捷,可以在生产环境中成功加载图标文件,只要注意写出正确的路径即可。
「劣势」:打开本地模拟的生产环境,匪夷所思的是,图标路径是/logo.png,而不是src/static/img/logo.png,而且图标被打包的位置也不对,不是期望的地方。设置的时候,不能写哈希值,也无法变成格式。
方案B:用js修改路径
修改入口js文件,把加载结果写入标签。
//index.html
<link rel="shortcut icon" type="image/x-icon" href="" id="J_logo">
//main.js
//加载index.html的shortcut图标
import logoicon from './static/img/logo.png';
document.getElementById("J_logo").href = logoicon;
「优势」:图标路径被加载成data:image/png;base64,而且是期望的路径。
「劣势」:自己写代码,手动把图标数据填充到link标签中,这不符合vue的数据驱动视图理念,因为修改了DOM标签属性值。本来打算在index.html中用数据驱动修改,没起作用,瞬间发现那个link标签明显在vue挂载元素的外面,用vue指令毫无意义。所以喽,还是乖乖在main.js中操作吧。
我个人更倾向于方案B,因为路径看了更神秘。
方案C:用html-loader
具体用法向下看,你会找到答案。
2、img标签
webpack不识别html中img标签src引用的图片,html-webpack-plugin也做不到,此时要借助html-loader加载你的html片段,它会检查你引入的html片段里对图片的引用。
var path = require('path');
module.exports = {
...
module: {
rules: [
{
test: /\.html$/,
use: [ "html-loader" ]
}
]
},
htmlLoader: {
ignoreCustomFragments: [/\{\{.*?}}/],
root: path.resolve(__dirname, '../dist'),
attrs: ['img:src', 'link:href']
}
};
三、css中
/*css 样式*/
.avatar {
display: inline-block;
width: 100px;
height: 100px;
border-radius: 50%;
background-image: url(../src/static/img/avatar.jpg);
background-size: 100px 100px;
}
四、js中
import avatar from './static/img/avatar.jpg';
document.getElementById("J_avatar").href = avatar;
如何在webpack中成功引用到图片?的更多相关文章
- 如何在latex 中插入EPS格式图片
如何在latex 中插入EPS格式图片 第一步:生成.eps格式的图片 1.利用visio画图,另存为pdf格式的图片 利用Adobe Acrobat裁边,使图片大小合适 另存为.eps格式,如下图所 ...
- 如何在mysql中存储音乐和图片文件
如何在mysql中存储音乐和图片文件? 果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的! 我将告诉你怎样通过HTML表单来储存这些文件, ...
- angular 图片加载失败 情况处理? 如何在ionic中加载本地图片 ?
1.angular 图片加载失败 情况处理 在directive中定义组件,在ng-src错误时,调用err-src app.directive('errSrc',function(){ return ...
- 工具分享:清理 Markdown 中没有引用的图片
前言: 之前,我写笔记的工具一直都是 notion,而且没有写博客的习惯.但是一是由于 notion 的服务器在国外,有时候很不稳定:二是由于 notion 的分享很不方便,把笔记分享给别人点开链接之 ...
- [TimLinux] JavaScript 如何在AJAX中替换元素的图片
1. 示例代码 /* * <img id="idTestImg" src="/static/test.png" /> */ var idTestIm ...
- 如何在webpack中使用loader
一.什么是loader loader 用于对模块的源代码进行转换.loader 可以使你在 import 或"加载"模块时预处理文件.因此,loader 类似于其他构建工具中“任务 ...
- 如何在JavaScript中正确引用某个方法(bind方法的应用)
在JavaScript中,方法往往涉及到上下文,也就是this,因此往往不能直接引用,就拿最常见的console.log("info…")来说,避免书写冗长的console,直接用 ...
- 如何在pyqt中使用 QGraphicsView 实现图片查看器
前言 在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEvent().mouseMoveEvent 等事件,但是如果要在图像上多添加一些形状,那么在 ...
- 如何在Notepad++ 中成功地安装Emmet 插件
对于前端来说,Emmet 是一个好东西,但是好几次在 “Notepad++” 中安装后不能使用.今天认认真真地查找了失败原因,配置完成后,终于可以在 “Notepad++” 下正常使用了.故把过程记录 ...
随机推荐
- Gym - 101350F Monkeying Around(线段树+树状数组)
When the monkey professor leaves his class for a short time, all the monkeys go bananas. N monkeys a ...
- Pandas系列(六)-时间序列详解
内容目录 1. 基础概述 2. 转换时间戳 3. 生成时间戳范围 4. DatetimeIndex 5. DateOffset对象 6. 与时间序列相关的方法 6.1 移动 6.2 频率转换 6.3 ...
- Linux系统在线安装、启动 redis
环境: Linux系统:VMware 14 中 CentOS 7 64 位 redis版本:redis-stable.tar.gz(当前版本是:redis-cli 4.0.9) 一.Linux在线安装 ...
- Ubuntu设置和查看环境变量
设置环境变量的三种方法 1.1 临时设置 export PATH=/home/yan/share/usr/local/arm/3.4.1/bin:$PATH 1.2 当前用户的全局设置 打开~/.ba ...
- 使用Spring-Integration实现http消息转发
目标:接收来自华为云的服务器报警信息,并转发到钉钉的自定义机器人中 使用Spring-Integration不仅节省了很多配置,还增加了可用性. 更多关于Spring-Integration的介绍可参 ...
- JavaScript Date日期对象以及日期格式化方法
前言 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象是在早期java中的java.util.Date类基础上创建的,为此,Date类型使用自UTC1 ...
- Select文字居右显示
使用text-align: right;不起作用,应当使用direction: rtl;
- UE4渲染笔记
Lightmass 实时渲染光影效果对性能有很大影响,可利用lightmass预先生成光影贴图,然后在游戏中使用. 将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果. 文档上是 li ...
- (一)校园信息通微信小程序从前端到后台整和笔记
前段时间接触了微信小程序,现在回过头来做一些笔记. 先上效果图 后台数据管理界面(PHP) 校园信息通微信小程序前端界面 下面先简单的说一下怎样部署一个微信小程序 首先是前端 微信小程序有它专门的开发 ...
- day 14 - 2 生成器练习
相关练习 1.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 #比较 low 的方法 def check_file(filename,aim): with open( ...