Webpack(3): 使用 loader 处理 CSS

简介: 上文讲解了 webpack 的简单配置和配置文件的使用,初步实现模块化的打包构建工作。本文将以在 webpack 中处理 css 样式文件为例,演示 loader 的使用。

前言

上文讲解了 webpack 的简单配置和配置文件的使用,初步实现模块化的打包构建工作。

本文将以在 webpack 中处理 css 样式文件为例,演示 loader 的使用

准备文件

准备样式文件:src/index.css

body {
  font-size: 40px;
  color: gold;
}

前文中说过,webpack 的世界,一切皆模块,每个文件就是一个模块。那么 css 文件也是一个模块,将其引入入口文件中,src/index.js:

import './index.css'

document.querySelector('body').innerHTML = 'Hello'

然后执行打包命令:

pnpm webpack

报错:

根据报错信息 “You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file”,意思是 需要配置一个合适的 loader 来处理 css 文件

Loader

什么是 loader

Webpack 基于 Node.js, 只“认识” JavaScriptJSON 文件。Loader,模块加载器,就是让 webpack 能够去识别其他类型的文件,并将它们转换为有效模块,以供应用程序使用,以及被添加到依赖图中。

处理 css 文件,我们需要用到两个 loader:

  • css-loader:解析 css 文件,转译为 webpack 能识别的模块
  • style-loader:将 css 使用

安装 loader

pnpm add css-loader style-loader -D

配置 loader

安装好 loader 还需要进行配置,告诉 webpack 这个 loader 针对哪些类型的模块发挥作用。

配置文件中提供了一个 module.rules 配置项,可知该配置项是用来配置模块规则的,也就是用来配置 loader 的。

const path = require('path')
module.exports = {
  mode: 'development',

  entry: './src/index.js',

  output: {
    filename: 'main.js',
    path: path.resolve(__dirname, './dist')
  },
  
  // module 用来配置处理模块
  module: {
    // rules 是一个数组, 每一项是针对某类模块的一种配置;可以有若干个配置
    rules: [
      // 规则有几个常用的属性
      { 
        // 通过正则表达式指定匹配的模块类型
        test: /\.css$/, 
        
        // 使用哪种 loader 进行处理
        // loader 的生效是有顺序的,从右到左,也就是先用 css-loader 处理 webpack 能识别的内容,再经 style-loader 将样式插入到页面中
        use: ['style-loader', 'css-loader'],
      }
    ]
  }
}

打开命令行窗口,执行打包命令:

pnpm webpack

没有再报错,css 模块已经能被正确处理了。

浏览器打开 index.html:

image-20220806013333733

经过打包后的 css 样式被插入到 html 文件中了。

但是这种打包方式不是特别好,最好的方式是将 css 样式内容打包成单独的文件,再被 html 引入。这样有利于减少 html 文件的体积,能提高首次加载 html 文件的速度。同时,也能合理的利用静态资源文件缓存,和应用 CDN 方案。

要实现这个效果,需要 webpack plugin 的支持,我们放到后面讲 plugin 的时候再介绍。

小结

本文介绍了如何使用 webpack 处理 css 文件,其实就是利用 css-loader 和 style-loader。同时介绍了 loader 在 webpack 中发挥的作用,就是帮助 webpack 处理它不认识的模块类型。同时也讲解了 loader 的简单配置。

下篇文章,会介绍如何在 webpack 中处理 less 文件和 scss 文件。

目录
相关文章
|
2月前
|
Web App开发 JSON 前端开发
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
51 0
|
3月前
|
JSON 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(上)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
56 0
|
3月前
|
前端开发 JavaScript
webpack 核心武器:loader 和 plugin 的使用指南(下)
webpack 核心武器:loader 和 plugin 的使用指南(下)
webpack 核心武器:loader 和 plugin 的使用指南(下)
|
3月前
|
JSON 前端开发 JavaScript
webpack 核心武器:loader 和 plugin 的使用指南(上)
webpack 核心武器:loader 和 plugin 的使用指南(上)
webpack 核心武器:loader 和 plugin 的使用指南(上)
|
3月前
|
XML JSON 前端开发
说说webpack中常见的loader?解决了什么问题?
在Webpack中,Loader是用于处理各种文件类型的模块加载器,它们用于对文件进行转换、处理和加载。常见的Loader解决了以下问题:
18 0
|
3月前
|
Web App开发 前端开发 JavaScript
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)(下)
Webpack【搭建Webpack环境、Webpack增加配置文件、Webpack中使用Loader、Webpack分离CSS文件 】(一)-全面详解(学习总结---从入门到深化)
26 0
|
1月前
|
前端开发 JavaScript
webpack成长指北第7章---webpack的css\less\scss样式打包
webpack成长指北第7章---webpack的css\less\scss样式打包
41 0
|
1月前
|
前端开发 JavaScript
webpack成长指北第8章---webpack的CSS Modules打包
webpack成长指北第8章---webpack的CSS Modules打包
19 0
|
10月前
|
前端开发 JavaScript
Webpack的基本使用,将html和css文件打包
Webpack的基本使用,将html和css文件打包
|
前端开发 JavaScript
Webpack轻松入门(二)——CSS打包
上一节讲到如何使用Webpack实现最基础的打包功能,但是发现以下几个比较突出的问题: ① 我们只打包了一个JS文件,多个文件该如何打包? ② CSS样式该如何打包? ③ 每次写完代码想要看运行结果都需要手动输命令打包,反而降低了开发效率 没关系,本文就是为解决这些问题而来的。
1197 0