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 文件。

目录
相关文章
|
1月前
|
前端开发
在Webpack配置文件中,如何配置loader以处理其他类型的文件,如CSS或图片
在Webpack配置文件中,通过设置`module.rules`来配置loader处理不同类型的文件。例如,使用`css-loader`和`style-loader`处理CSS文件,使用`file-loader`或`url-loader`处理图片等资源文件。配置示例:在`rules`数组中添加对应规则,指定`test`匹配文件类型,`use`指定使用的loader。
|
1月前
|
前端开发 JavaScript
webpack 中 loader 和 plugin 的区别
在 webpack 中,loader 用于转换模块的源代码,如将 TypeScript 转为 JavaScript;而 plugin 则扩展了 webpack 的功能,可以执行更复杂的任务,如优化打包文件、注入环境变量等。两者共同作用于构建流程的不同阶段。
|
1月前
|
JavaScript 前端开发
Webpack中loader的使用场景
Webpack中的Loader用于处理和转换模块文件,如将TypeScript转为JavaScript、CSS预处理等,通过配置不同的Loader,可以灵活地支持多种文件类型和语言,实现模块化开发与构建优化。
|
2月前
|
前端开发 UED
Webpack 中处理 CSS 和图片资源的多 Loader 配置
【10月更文挑战第12天】 处理 CSS 和图片资源是 Webpack 配置中的重要部分。通过合理选择和配置多个 Loader,可以实现对这些资源的精细处理和优化,提升项目的性能和用户体验。在实际应用中,需要不断探索和实践,根据项目的具体情况进行灵活调整和优化,以达到最佳的处理效果。通过对 Webpack 中多 Loader 处理 CSS 和图片资源的深入了解和掌握,你将能够更好地应对各种复杂的资源处理需求,为项目的成功构建和运行提供坚实的基础。
91 1
|
2月前
|
前端开发 JavaScript
Webpack 中多个 Loader 的配置
【10月更文挑战第12天】使用多个 Loader 进行配置是 Webpack 中常见的操作,可以实现对各种资源的精细处理和优化。在配置时,需要根据具体需求合理选择和排列 Loader,并注意它们之间的顺序和交互关系。同时,不断了解和掌握新的 Loader 以及它们的特性,有助于更好地发挥 Webpack 的强大功能,提升项目的开发效率和质量。通过深入理解和熟练运用多个 Loader 的配置方法,你将能够更加灵活地处理各种资源,满足项目的多样化需求。
78 2
|
2月前
|
前端开发 JavaScript
Webpack 常用 Loader 和 Plugin
【10月更文挑战第12天】Webpack 是一个强大的模块打包工具,能够将各种资源模块进行打包和处理。Loader 用于转换模块的源代码,如 `babel-loader` 将 ES6+ 代码转换为 ES5,`css-loader` 处理 CSS 文件等。Plugin 扩展 Webpack 功能,如 `HtmlWebpackPlugin` 自动生成 HTML 文件,`UglifyJsPlugin` 压缩 JavaScript 代码。通过合理配置和使用 Loader 和 Plugin,可以构建高效、优化的项目。
31 2
|
3月前
|
设计模式 前端开发 JavaScript
webpack实战之手写一个loader和plugin
该文章详细讲解了如何从零开始编写一个自定义的Webpack Loader和Plugin,包括它们的工作原理、开发步骤以及如何将自定义的Loader和Plugin集成到Webpack配置中。
webpack实战之手写一个loader和plugin
|
4月前
|
缓存 JSON JavaScript
Webpack 传递给 Loader 的原始内容是一个 UTF-8 格式编码的字符串
本文详细介绍了Webpack中Loader的概念及其重要性。Webpack仅支持处理JS和JSON文件,而对于CSS、图片等其他类型文件,则需要Loader来转换。文章列举了多种常见Loader,如css-loader、style-loader、babel-loader等,并提供了具体配置示例。此外,还介绍了如何自定义Loader,包括初始化项目、实现基本功能及处理异步操作等内容。通过本文,读者可以全面了解Loader的作用及其实现方法。
39 3
|
5月前
|
缓存 JSON JavaScript
用Webpack写一个Loader
在Webpack写一个Loader
30 1
|
4月前
webpack——You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
webpack——You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file.
696 0

热门文章

最新文章