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 wmp操作代码小结(音乐连播功能)
Nov 08 Javascript
不安全的常用的js写法
Sep 15 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 Javascript
setTimeout自动触发一个js的方法
Jan 15 Javascript
SuperSlide标签切换、焦点图多种组合插件
Mar 14 Javascript
Javascript中String的常用方法实例分析
Jun 13 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
AngularJs 指令详解及示例代码
Sep 01 Javascript
jQuery图片切换动画特效
Nov 02 Javascript
Vue.js移动端左滑删除组件的实现代码
Sep 08 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
Sep 30 Javascript
Vue实战教程之仿肯德基宅急送App
Jul 19 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版自动生成文章摘要
2008/07/23 PHP
深入理解PHP原理之异常机制
2010/08/21 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
深入浅析knockout源码分析之订阅
2016/07/12 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
jQuery插件HighCharts实现的2D条状图效果示例【附demo源码下载】
2017/03/15 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
JavaScript中的函数申明、函数表达式、箭头函数
2019/12/06 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
解决Spyder中图片显示太小的问题
2018/04/27 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
python 解决pycharm运行py文件只有unittest选项的问题
2020/09/01 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
ECOSUSI官网:女式皮革背包
2019/09/27 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
工业自动化专业毕业生推荐信
2013/11/18 职场文书
员工自我工作评价
2015/03/06 职场文书
学校推普周活动总结
2015/05/07 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
小学语文国培研修日志
2015/11/13 职场文书
导游词之舟山普陀山
2019/11/06 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL