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 尚未实现错误解决办法
Nov 27 Javascript
javascript的console.log()用法小结
May 31 Javascript
Jquery实现由下向上展开效果的例子
Dec 08 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
js时间戳转为日期格式的方法
Dec 28 Javascript
javascript中递归的两种写法
Jan 17 Javascript
Bootstrap缩略图与警告框学习使用
Feb 08 Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 Javascript
JavaScript中的高级函数
Jan 04 Javascript
jQuery解析json格式数据示例
Sep 01 jQuery
vue1.0和vue2.0的watch监听事件写法详解
Sep 11 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
Apr 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解码unicode编码的中文字符代码分享
2014/08/13 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
php获取网站百度快照日期的方法
2015/07/29 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
ajax无刷新动态调用股票信息(改良版)
2008/11/01 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
使用nodejs、Python写的一个简易HTTP静态文件服务器
2014/07/18 NodeJs
上传图片js判断图片尺寸和格式兼容IE
2014/09/01 Javascript
js实现点击添加一个input节点
2014/12/05 Javascript
详解jQuery中的DOM操作
2016/12/23 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
JS 数组基本用法入门示例解析
2020/01/16 Javascript
Python实现配置文件备份的方法
2015/07/30 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
2016/08/28 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
python实现定时提取实时日志程序
2018/06/22 Python
Pytorch之Variable的用法
2019/12/31 Python
Python 如何定义匿名或内联函数
2020/08/01 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
欧洲当代手工玻璃和瓷器的领先品牌:LSA International
2018/06/03 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
C语言笔试题
2014/09/04 面试题
如何使用PyCharm及常用配置详解
2021/06/03 Python
MySQL 不等于的三种使用及区别
2021/06/03 MySQL
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android