07- webpack 加载图片

一、JavaScript 加载图片

JavaScript 中加载图片,两种使用方法

  1. 加载背景图片 background-image
  2. 加载图片 <img>src

语法和 JavaScript 语法一样,区别是使用的图片的路径是 webpack 通过file-loader或者url-loader 处理过的路径。

//原用法
element.style.backgroundImage = `url(./icon.jpg)`;
//webpack用法
import Icon from './icon.jpg';
element.style.backgroundImage = `url(${Icon})`;

1.1 安装

npm install --save-dev file-loader
//或者
yarn add file-loader --dev

1.2 编辑 webpack.config.js

const path = require('path');

  module.exports = {
    entry: './src/index.js',
    output: {
      filename: 'bundle.js',
      path: path.resolve(__dirname, 'dist')
    },
    module: {
      rules: [
        {
          test: /\.css$/,
          use: [
            'style-loader',
            'css-loader'
          ]
        },
+       {
+         test: /\.(png|svg|jpg|gif)$/,
+         use: [
+           'file-loader'
+         ]
+       }
      ]
    }
  };

import MyImage from './my-image.png' 时,此图像将被处理并添加到 output 目录,即 dist 目录,并且 MyImage 变量将包含该图像在处理后的最终 url。

1.3 添加图片

将图片添加到 src 目录下

webpack-demo
  |- package.json
  |- webpack.config.js
  |- /dist
    |- bundle.js
    |- index.html
  |- /src
+   |- icon.jpg
    |- style.css
    |- index.js
  |- /node_modules

1.4 编辑 index.js

1.4.1 加载 img 图片

import "./style.css"
import Icon from './icon.jpg';
//生成一个内容为Hello webpack !的div标签
function component() {
    let element = document.createElement('div');
    element.innerHTML = "Hello webpack !";
    //添加class
    element.classList.add("hello");
    return element;
}
//将生成的div标签添加到body中去
document.body.appendChild(component());


function addImage() {
    let element = document.createElement('img');
    //设置图片路径
    element.src = Icon;
    //添加class
    element.classList.add("image");
    return element;
}
//将生成的img标签添加到body中去
document.body.appendChild(addImage());

1.4.2 加载 backgroundImage 图片

import "./style.css"
import Icon from './icon.jpg';
//生成一个内容为Hello webpack !的div标签
function component() {
    let element = document.createElement('div');
    element.innerHTML = "Hello webpack !";
    //添加class
    element.classList.add("hello");
    //添加背景图片
    element.style.backgroundImage = `url(${Icon})`;
    element.style.backgroundSize = "100px 100px";
    return element;
}
//将生成的div标签添加到body中去
document.body.appendChild(component());


function addImage() {
    let element = document.createElement('img');
    //设置图片路径
    element.src = Icon;
    //添加class
    element.classList.add("image");
    return element;
}
//将生成的img标签添加到body中去
document.body.appendChild(addImage());

1.5 编辑 style.css

.hello{
    color: red;
    width: 100px;
    height: 100px;
}
.image{
    width: 100px;
    height: 100px;
}

1.6 重新构建

构建结果

yarn run v1.16.0
$ webpack
Hash: d7ac9c7c6cadcfb4b6e3
Version: webpack 4.35.3
Time: 497ms
Built at: 07/24/2019 1:55:58 PM
                               Asset      Size  Chunks             Chunk Names
76e7e08e0b3a04a612c89ad13c999813.jpg    51 KiB          [emitted]  
                           bundle.js  7.42 KiB       0  [emitted]  main
Entrypoint main = bundle.js
[0] ./src/icon.jpg 82 bytes {0} [built]
[1] ./src/index.js 687 bytes {0} [built]
[2] ./src/style.css 1.06 KiB {0} [built]
[3] ./node_modules/css-loader/dist/cjs.js!./src/style.css 337 bytes {0} [built]
    + 3 hidden modules

WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/
✨  Done in 1.14s.

1.7 打开 index.html 文件

如果一切顺利可以看到

  1. Hello webpack 文本及背景图片
  2. img 元素

二、CSS 加载背景图片

在 JavaScript 加载图片 import Icon from './icon.jpg' 时,此图像将被处理并添加到 output 目录,并且 Icon 变量将包含该图像在处理后的最终 url。

CSS 的加载是通过 css-loader 实现的时,会使用类似过程处理 CSS 中的 url(’./icon.jpg’)。loader 会识别这是一个本地文件,并将 ‘./icon.jpg’ 路径,替换为 output 目录中图像的最终路径。

2.1 编辑 index.js

import "./style.css"
import Icon from './icon.jpg';
//生成一个内容为Hello webpack !的div标签
function component() {
    let element = document.createElement('div');
    element.innerHTML = "Hello webpack !";
    //添加class
    element.classList.add("hello");
    //添加背景图片
    element.style.backgroundImage = `url(${Icon})`;
    element.style.backgroundSize = "100px 100px";
    return element;
}
//将生成的div标签添加到body中去
document.body.appendChild(component());

//添加backgroundImage
function backgroundImage() {
    let element = document.createElement('div');
    element.innerHTML = "backgroundImage";
    //添加class
    element.classList.add("backgroundImage");
    return element;
}
//将生成的div标签添加到body中去
document.body.appendChild(backgroundImage());

function addImage() {
    let element = document.createElement('img');
    //设置图片路径
    element.src = Icon;
    //添加class
    element.classList.add("image");
    return element;
}
//将生成的img标签添加到body中去
document.body.appendChild(addImage());

2.2 编辑 style.css

.hello{
    color: red;
    width: 100px;
    height: 100px;
}
.backgroundImage{
    color: blueviolet;
    background-image: url('./icon.jpg');
    background-size:100% 100%;
    width: 100px;
    height: 100px;
}
.image{
    width: 100px;
    height: 100px;
}

2.3 重新构建

构建结果

$ webpack
Hash: 28f62e786edae16d5190
Version: webpack 4.35.3
Time: 655ms
Built at: 07/24/2019 2:26:01 PM
                               Asset      Size  Chunks             Chunk Names
76e7e08e0b3a04a612c89ad13c999813.jpg    51 KiB          [emitted]  
                           bundle.js  7.86 KiB       0  [emitted]  main
Entrypoint main = bundle.js
[0] ./src/icon.jpg 82 bytes {0} [built]
[1] ./src/index.js 957 bytes {0} [built]
[2] ./src/style.css 1.06 KiB {0} [built]
[3] ./node_modules/css-loader/dist/cjs.js!./src/style.css 582 bytes {0} [built]
    + 4 hidden modules

WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/configuration/mode/
✨  Done in 2.00s.

2.4 打开 index.html 文件

如果一切顺利可以看到

  1. Hello webpack 文本及背景图片
  2. backgroundImage 文本及背景图片
  3. img 元素

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值