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 相关文章推荐
js 刷新页面的代码小结 推荐
Apr 02 Javascript
用Javascript来生成ftp脚本的小例子
Jul 03 Javascript
使用C++为node.js写扩展模块
Apr 22 Javascript
ExtJs动态生成treepanel的Json格式
Jul 19 Javascript
jQuery解析Json实例详解
Nov 24 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
Jan 10 Javascript
node.js 抓取代理ip实例代码
Apr 30 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
Jan 21 jQuery
JavaScript中变量、指针和引用功能与操作示例
Aug 04 Javascript
详解微信小程序图片地扯转base64解决方案
Aug 18 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 Javascript
vue整合百度地图显示指定地点信息
Apr 06 Vue.js
微信小程序实现单选选项卡切换效果
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来写记数器(详细介绍)
2006/10/09 PHP
php 数组的一个悲剧?
2011/05/11 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
再探JavaScript作用域
2014/09/24 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
详解js中构造流程图的核心技术JsPlumb
2015/12/08 Javascript
微信小程序 ecshop地址三级联动实现实例代码
2017/02/28 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
利用Django框架中select_related和prefetch_related函数对数据库查询优化
2015/04/01 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
详解python校验SQL脚本命名规则
2019/03/22 Python
python 梯度法求解函数极值的实例
2019/07/10 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
如何强制垃圾回收
2015/10/06 面试题
专升本个人自我评价
2013/12/22 职场文书
会计电算化专业毕业生推荐信
2013/12/24 职场文书
追悼会子女答谢词
2014/01/28 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
医院护士工作检讨书
2014/10/26 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android