webpack-url-loader 解决项目中图片打包路径问题


Posted in Javascript onFebruary 15, 2019

刚开始用webpack的同学很容易掉进图片打包这个坑里,比如打包出来的图片地址不对或者有的图片并不能打包进我们的目标文件夹里。

下面我们就来分析下在webpack项目中图片的应用场景。

1.CSS文件中的背景图等设置

项目目录图:

webpack-url-loader 解决项目中图片打包路径问题

以下以我项目中的test.css为例

.test{
  color: red;
  width: 150px;
  height: 100px;
  overflow: hidden;
  background: url("../img/box@2x.png") no-repeat;
  background-size: 150px auto;
}
.img-base64{
  color: red;
  width: 150px;
  height: 100px;
  overflow: hidden;
  background: url("../img/media1.png") no-repeat;
  background-size: 100px auto;
}
#img-e {
  width:100px;
}

2.html文件中引入图片,下面为模板文件index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>webpack-img</title>
</head>
<body>
1.css背景图 图片格式
<div class="test"></div>
2.css背景图 转化为base64
<div class="img-base64"></div>
3.html里引入图片
<div><img src="img/media4.png" alt=""></div>
4.js里引入图片
</body>
</html>

3.js中引入图片

require('../css/test.css');
var imgSrc = require('../img/do.gif');

var img = new Image();
img.id = 'img-e';
img.src = imgSrc;
document.body.appendChild(img);

url-loader

在 webpack 中引入图片需要依赖 url-loader 这个加载器。

在 webpack.config.js 文件中配置如下:

{
    test:/\.(jpg|png|gif|bmp|jpeg)$/,
    loader: 'url-loader?limit=8192&name=img/[hash:8].[name].[ext]'
   }

test 属性代表可以匹配的图片类型,除了 png、jpg 之外也可以添加 gif 等,以竖线隔开即开。

loader 后面 limit 字段代表图片打包限制,这个限制并不是说超过了就不能打包,而是指当图片大小小于限制时会自动转成 base64 码引用。上例中大于8192字节的图片正常打包,小于8192字节的图片以 base64 的方式引用。

url-loader 后面除了 limit 字段,还可以通过 name 字段来指定图片打包的目录与文件名

而使用extractTextPlugin插件时,需要配置publicPath: "../", 不配置时css文件中背景图默认地址会在css文件夹下查找图片资源,导致项目图片路径不正确

webpack.config.js 配置文件如下:

const webpack = require("webpack")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const extractTextPlugin = require("extract-text-webpack-plugin")

const path = require('path')
const extractCSS = new extractTextPlugin("css/[name].[hash:6].css")//
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin');//压缩css插件
module.exports = {
 //注意这里是exports不是
 entry: './src/js/main.js',
 output: {
  publicPath:"./",
  path: path.resolve(__dirname + "/dist"),
  //打包后的js文件存放的地方
  filename: "js/[name].[hash:6].js" //打包后的js文件名
 },
 plugins: [
  extractCSS,
  new OptimizeCssAssetsPlugin(),//压缩css
  new webpack.optimize.UglifyJsPlugin(),//new uglify(),//压缩js
  new HtmlWebpackPlugin({
   filename: 'index.html',
   template:'src/index.html'
  })
 ],
 module: {
  rules: [ //1.0的是loaders
   //处理js中的loader
   {
    test: /\.js$/,
    loader: 'babel-loader',
    include: path.resolve(__dirname, '/src'),
    //指定打包的文件
    exclude: path.resolve(__dirname, '/node_modules') //排除打包的文件,加速打包时间
   },
   //处理css中的loader
   {
    test: /\.css$/,
    use: extractTextPlugin.extract({
     fallback: "style-loader",
     publicPath: "../",
     use: [
      {
       loader: 'css-loader',
       options:{
        minimize: true //css压缩
       }
      }
     ]
    })
   },
   //处理html模板中的loader
   {
    test: /\.html$/,
    loader: 'html-loader'
   },
   //处理ejs模板中的loader,以.tpl后缀结尾的
   {
    test: /\.tpl$/,
    loader: 'ejs-loader'
   },
   //处理图片中的loader,file-loader,url-loader,image-webpack-loader相互配合(图片格式转换base64 图片压缩)
   {
    test:/\.(jpg|png|gif|bmp|jpeg)$/,
    loader: 'url-loader?limit=8192&name=img/[hash:8].[name].[ext]'
   }
   ]
 }
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript随机之洗牌算法深入分析
Jun 07 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 Javascript
推荐5 个常用的JavaScript调试技巧
Jan 08 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
javascript实现任务栏消息提示的简单实例
May 31 Javascript
js实现滑动到页面底部自动加载更多功能
Feb 15 Javascript
通过命令行生成vue项目框架的方法
Jul 12 Javascript
前端js中的事件循环eventloop机制详解
May 15 Javascript
解决Layui中layer报错的问题
Sep 03 Javascript
解决vue的touchStart事件及click事件冲突问题
Jul 21 Javascript
js 数据类型判断的方法
Dec 03 Javascript
微信小程序实现单选选项卡切换效果
Jun 19 #Javascript
一秒学会微信小程序制作table表格
Feb 14 #Javascript
React通过redux-persist持久化数据存储的方法示例
Feb 14 #Javascript
微信小程序实现简易table表格
Jun 19 #Javascript
微信小程序制作表格的方法
Feb 14 #Javascript
手把手带你封装一个vue component第三方库
Feb 14 #Javascript
微信小程序实现简单表格
Feb 14 #Javascript
You might like
Zerg剧情介绍
2020/03/14 星际争霸
php中++i 与 i++ 的区别
2012/08/08 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
2014/07/01 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
javascript先序遍历DOM树的方法
2016/02/27 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
前端学习笔记style,currentStyle,getComputedStyle的用法与区别
2016/05/28 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
loading动画特效小结
2017/01/22 Javascript
jQuery表格(Table)基本操作实例分析
2017/03/10 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
使用express获取微信小程序二维码小记
2019/05/21 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
Python语言技巧之三元运算符使用介绍
2013/03/04 Python
python list转dict示例分享
2014/01/28 Python
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
信息服务专业毕业生求职信
2014/03/02 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
2015年组织委员工作总结
2015/04/23 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
MySQL完整性约束的定义与实例教程
2021/05/30 MySQL
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android