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插件分享之气泡形提示控件grumble.js
May 20 Javascript
Bootstrap媒体对象的实现
May 01 Javascript
JavaScript作用域示例详解
Jul 07 Javascript
js方法数据验证的简单实例
Sep 17 Javascript
Javascript中arguments对象的详解与使用方法
Oct 04 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
微信小程序 数据交互与渲染实例详解
Jan 21 Javascript
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 jQuery
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
Sep 01 Javascript
jQuery实现简单飞机大战
Jul 05 jQuery
微信小程序实现单选选项卡切换效果
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
6种php上传图片重命名的方法实例
2013/11/04 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
学习ExtJS Column布局
2009/10/08 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
更强大的vue ssr实现预取数据的方式
2019/07/19 Javascript
vue样式穿透 ::v-deep的具体使用
2020/06/04 Javascript
详解JS预解析原理
2020/06/16 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
python计算书页码的统计数字问题实例
2014/09/26 Python
用Python进行TCP网络编程的教程
2015/04/29 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
python 6种方法实现单例模式
2020/12/15 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
5分钟弄清楚html5的drag and drop(小结)
2019/04/10 HTML / CSS
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
纬创Java面试题笔试题
2014/10/02 面试题
销售经理工作职责范文
2013/12/03 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
《两只鸟蛋》教学反思
2014/02/10 职场文书
小学生运动会报道稿
2014/09/12 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
南湾猴岛导游词
2015/02/09 职场文书
《比的意义》教学反思
2016/02/18 职场文书
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python