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 相关文章推荐
基于jquery实现图片广告轮换效果代码
Jul 07 Javascript
jQuery scroll事件实现监控滚动条分页示例
Apr 04 Javascript
JavaScript函数模式详解
Nov 07 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
Aug 10 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
JS hashMap实例详解
May 26 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
Mar 08 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
浅谈箭头函数写法在ReactJs中的使用
Aug 22 Javascript
js自定义trim函数实现删除两端空格功能
Feb 09 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
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
2011/06/28 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
TNC vs RR BO3 第一场 2.14
2021/03/10 DOTA
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
jquery 删除字符串最后一个字符的方法解析
2014/02/11 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
javascript实现密码验证
2015/11/10 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
3kb jQuery代码搞定各种树形选择的实现方法
2016/06/10 Javascript
灵活使用数组制作图片切换js实现
2016/07/28 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
详解python分布式进程
2018/10/08 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
利用Python计算KS的实例详解
2020/03/03 Python
django rest framework 自定义返回方式
2020/07/12 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
管理学专业个人求职信范文
2013/09/21 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
安全责任书怎么写
2014/07/28 职场文书
退学证明范本3篇
2014/10/29 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
初中体育课教学反思
2016/02/16 职场文书
【海涛DOTA】D-cup邀请赛NV.cn vs DT.Love
2022/04/01 DOTA
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL