美文网首页
07- webpack 加载图片

07- webpack 加载图片

作者: 好_快 | 来源:发表于2019-07-18 17:54 被阅读0次

一、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 元素

参考链接

相关文章

  • 17-webpack 压缩图片

    在 07-加载图片 之后,便可以正常加载和显示图片了;但是这些图片都是未经压缩的原尺寸,webpack 通过 im...

  • 07- webpack 加载图片

    一、JavaScript 加载图片 JavaScript 中加载图片,两种使用方法 加载背景图片 backgro...

  • 前端性能优化

    1,压缩合并文件,包括压缩图片,精灵图,webpack/gulp打包 2,图片懒加载 3,图片加载队列 4,cdn缓存

  • 19-webpack 加载图片优化

    在 07-webpack加载图片 中,有2中方式可以加载图片资源 通过 JavaScript ,使用 file-l...

  • webpack之图片加载

    还记得第一次接触webpack的时候,以为它是来拯救世界的,稍有了解后发现只能以玄学配置,佛系三问来相处。很幸运,...

  • Webpack笔记一

    webpack webpack是模块加载器兼打包工具,它可以把各种资源,如js、less/sass、图片等做为模块...

  • webpack打包图片文件

    打包图片文件 url-loader 在 webpack 中引入图片需要依赖 url-loader 这个加载器。安装...

  • 4.11.1 用 Webpack 实现按需加载

    4.11.1 用 Webpack 实现按需加载 问题一: 用 Webpack 实现按需加载? Webpack 内置...

  • webapck处理页面中的图片

    react中,无法直接使用这样加载图片的,必须在webpack中...

  • webpack加载html和图片

    html加载器 在webpack-course下面将dist/index.html移到src下面并且删掉dist下...

网友评论

      本文标题:07- webpack 加载图片

      本文链接:https://www.haomeiwen.com/subject/nrkrlctx.html