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 相关文章推荐
document对象execCommand的command参数介绍
Aug 01 Javascript
js内置对象 学习笔记
Aug 01 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
Jul 20 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
Nov 05 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
Sep 13 Javascript
jQuery向父辈遍历的简单方法
Sep 18 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
Ionic3 UI组件之Gallery Modal详解
Jun 07 Javascript
详解使用vue实现tab 切换操作
Jul 03 Javascript
Vue2 模板template的四种写法总结
Feb 23 Javascript
Swiper实现导航栏滚动效果
Oct 16 Javascript
vue项目如何打包之项目打包优化(让打包的js文件变小)
Apr 30 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小教程之实现双向链表
2014/06/12 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
JS中类或对象的定义说明
2014/03/10 Javascript
jquery实现动态画圆
2014/12/04 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
微信小程序实现带放大效果的轮播图
2020/05/26 Javascript
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Python标准库之collections包的使用教程
2017/04/27 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
Python设计模式之外观模式实例详解
2019/01/17 Python
对python过滤器和lambda函数的用法详解
2019/01/21 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Python实现打印实心和空心菱形
2019/11/23 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
Python如何自动获取目标网站最新通知
2020/06/18 Python
理货员的岗位职责
2013/11/23 职场文书
安全标准化实施方案
2014/02/20 职场文书
煤矿安全承诺书
2014/05/22 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
旅游投诉信范文
2015/07/02 职场文书
诚信教育主题班会
2015/08/13 职场文书
工商局调档介绍信
2015/10/22 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python