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 相关文章推荐
让网页根据不同IE版本显示不同的内容
Feb 08 Javascript
JavaScript起点(严格模式深度了解)
Jan 28 Javascript
js用Date对象处理时间实现思路及代码
Jan 31 Javascript
javascript进行数组追加方法小结
Jun 16 Javascript
JSONObject使用方法详解
Dec 17 Javascript
基于jQuery实现选取月份插件附源码下载
Dec 28 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
Aug 17 Javascript
原生js实现电商侧边导航效果
Jan 19 Javascript
js时间戳与日期格式之间相互转换
Dec 11 Javascript
基于vue.js无缝滚动效果
Jan 25 Javascript
Vue中el-form标签中的自定义el-select下拉框标签功能
Apr 20 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
Apr 26 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 高手之路(三)
2006/10/09 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
Drupal7 form表单二次开发要点与实例
2014/03/02 PHP
windows7下php开发环境搭建图文教程
2015/01/06 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
django模板语法学习之include示例详解
2017/12/17 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
Python用61行代码实现图片像素化的示例代码
2018/12/10 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
下载官网python并安装的步骤详解
2019/10/12 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
Infababy英国:婴儿推车、Travel System婴儿车和婴儿汽车座椅销售
2018/05/23 全球购物
C#面试题
2016/05/06 面试题
EJB timer的种类
2014/10/28 面试题
市场营销专业推荐信
2013/11/03 职场文书
仓管员岗位职责范文
2013/11/08 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
工作作风建设心得体会
2014/10/22 职场文书
辞职信的写法
2015/02/27 职场文书
外出考察学习心得体会
2016/01/18 职场文书
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL