webpack之loader04

什么是loader

webpack 支持使用 loader 对文件进行预处理。

webpack不仅可以自动处理js之间相关的依赖,还可以加载css文件、图片、将ES6转成ES5代码、TypeScript转成ES5代码,scss、less转成css,.jsx、.vue文件转成.js文件等。

而webpack本身是不支持这些转化的,故需要给webpack扩展对应的loader。

loader的使用

初始化:npm init -y

在这里插入图片描述
在这里插入图片描述

1、css文件的处理

把css文件当成模块打包,在入口文件里面,写上依赖的css文件

新建一个normal.css文件

body{
  background-color: pink;
}

文件结构目录(创建文件夹有规范,入口一般放在外面)+在入口文件中引入css文件
在这里插入图片描述
若不在入口文件中引用css文件,则webpack会找不到normal.css文件,因为webpack是通过入口查找其他依赖的文件,而入口文件只有一个。

通过npm安装需要使用的loader

可在webpack官网中找到很多loader,并学习对应的用法。
在这里插入图片描述

此处需要安装css-loader、style-loader

在终端输入:
npm install --save-dev css-loader
npm install --save-dev style-loader
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在webpack.config.js中的modules关键字下进行配置。

webpack.config.js

// 通过node里面的path包,动态获取路径
const path = require('path');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
  },
  module: {
    rules: [
      {
        // 正则表达式,匹配所有的css文件
        test: /\.css$/i,
        // css-loader只负责将css文件进行加载,style-loader负责将样式添加到dom对象上
        // 使用多个loader时从右往左读取
        use: ['style-loader','css-loader'],
      }
    ]
  }
}

输入npm run build运行查看效果(npm run build使用的本地的webpack打包,在cmd等终端直接使用webpack打包使用的是全局的webpack)
在这里插入图片描述
效果:
在这里插入图片描述

若webpack.config.js中顺序为

use: ['css-loader','style-loader']

在这里插入图片描述
运行效果为
在这里插入图片描述
谨记!!!使用多个loader时,loader的读取顺序为从右向左读取

2、less文件的处理(原理同上)
在css文件夹中创建less文件

在这里插入图片描述
在这里插入图片描述

@fontSize: 60px;
@fontColor: green;
body{
  font-size: @fontSize;
  color: @fontColor;
}
在main.js中引入less文件

在这里插入图片描述

// CommonJS模块化规范,导入
const {add, mul} =require("./js/mathUtility");

console.log(add(5,6));
console.log(mul(11,2));

// ES6模块化规范,导入
import {name,age,wish} from "./js/personProps";

console.log("name=" + name + ",age=" + age + ",wish=" + wish);

// 引入CSS文件
require("../src/css/normal.css");

// 引入Less文件
require("../src/css/special.less");
document.writeln("webpack YYDS");

安装less-loader

npm install --save-dev less-loader less
在这里插入图片描述
安装成功
在这里插入图片描述

在webpack.config.js中配置.less

在这里插入图片描述
在这里插入图片描述

// 通过node里面的path包,动态获取路径
const path = require('path');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        // 正则表达式,匹配所有的css文件
        test: /\.css$/i,
        // css-loader只负责将css文件进行加载,style-loader负责将样式添加到dom对象上
        // 使用多个loader时从右往左读取
        use: ['style-loader','css-loader'],
      },
      {
        test: /\.less$/,
        use: [{
          loader: "style-loader" // creates style nodes from JS strings
        }, {
          loader: "css-loader" // translates CSS into CommonJS
        }, {
          loader: "less-loader" // compiles Less to CSS
        }]
      }
    ]
  }
}
运行查看效果

在终端输入npm run build
在这里插入图片描述
最终效果
在这里插入图片描述

3、图片文件的处理(原理同上)
在css文件中引用图片url

在这里插入图片描述

normal.css

body{
  /*background-color: pink;*/
  background-image: url("../imgs/backimg01.jpg");
}
在main.js中引入css文件

在之前的操作中已经引入
在这里插入图片描述

安装url-loader

在这里插入图片描述
在终端输入npm install --save-dev url-loader

安装成功
在这里插入图片描述

在webpack.config.js中配置图片文件

在这里插入图片描述
在这里插入图片描述

// 通过node里面的path包,动态获取路径
const path = require('path');

module.exports = {
  entry: './src/main.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist'),
    // publicPath: 'dist/'
  },
  module: {
    rules: [
      {
        // 正则表达式,匹配所有的css文件
        test: /\.css$/i,
        // css-loader只负责将css文件进行加载,style-loader负责将样式添加到dom对象上
        // 使用多个loader时从右往左读取
        use: ['style-loader','css-loader'],
      },
      {
        test: /\.less$/,
        use: [{
          loader: "style-loader" // creates style nodes from JS strings
        }, {
          loader: "css-loader" // translates CSS into CommonJS
        }, {
          loader: "less-loader" // compiles Less to CSS
        }]
      },
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'url-loader',
            options: {
              limit: 8192,
              // name: 'imgs/[name].[hash:8].[ext]'
            }
          }
        ]
      }
    ]
  }
}

limit属性规定了图片大小的分界线。

  • 当加载的图片 < limit规定的大小时,图片被编译为base64字符串形式
    在这里插入图片描述

在这里插入图片描述

  • 当加载的图片 > limit规定的大小时,使用file-loader进行加载
    在这里插入图片描述
    运行时提示找不到file-loader
    在这里插入图片描述
    在终端输入npm install --save-dev file-loader安装file-loader
    在这里插入图片描述
    运行查看效果
    在这里插入图片描述
规范命名格式和路径

webpack自动打包图片时,图片的命名是一个32位的hash值(防止图片重名),
在这里插入图片描述
在webpack.config.js中图片文件配置处添加name属性
在这里插入图片描述

name: 'imgs/[name].[hash:8].[ext]'解析:

  • imgs:文件打包到imgs文件夹下;
  • [name]:获取图片原来的名字;
  • [hash:8]:为防止图片名字冲突,此处依然使用hash值,但只保留8位;
  • [ext]:使用图片原来的扩展名。

效果:
在这里插入图片描述
规范路径:
在webpack.config.js的出口中添加publicPath: 'dist/'
打包后的文件在dist文件夹下,若此处不配置则会出现图片路径有问题导致加载失败的情况。
在这里插入图片描述
最终效果:
在这里插入图片描述

补充:
非盈利组织网站后缀为org,如:webpack.js.org

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值