Webpack入门,样式处理

除了JavaScript以外,Webpack在打包方面另一个重要的工作就是样式处理。在具有一定规模的工程中,由于手工维护CSS的成本过于高昂,开发者可能会需要更智能的方案来解决浏览器兼容性问题,更优雅地处理组件间的样式隔离,甚至是借助一些更强大的语言特性来满足各种各样的需求。

《Webpack入门,预处理器》一篇中讲解过style-loader与css-loader,通过JS引用CSS文件的方式打包样式,可以更清晰地描述模块间的依赖关系。然而,当时打包之后并没有输出单独的CSS文件(虽然在源码中使用的单独的CSS文件),通过在浏览器开发者工具查看打包之后的页面中的元素,会发现样式是通过附加style标签的方式引入的。

一般来说,在生产环境下,开发者往往希望样式存在于CSS文件中而不是style标签中,因为文件更有利于客户端进行缓存。Webpack社区有专门的插件:extract-text-webpack-plugin(适用于Webpack 4之前版本)和mini-css-extract-plugin(适用于Webpack 4及以上版本),它们就是专门用于提取样式到CSS文件的。

温馨提示

由于示例工程使用的Webpack版本是5.74.0,所以本篇不在讲解extract-text-webpack-plugin插件的使用。

通过示例来认识一下mini-css-extract-plugin插件。

安装mini-css-extract-plugin插件

npm install mini-css-extract-plugin -D

接下来,修改配置文件

// webpack.config.js
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
  entry: './app.js',
  output: {
    filename: 'bundle.js',
  },
  mode: 'development',
  module: {
    rules: [{
      test: /\.css$/,
      use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              // 这里可以指定一个 publicPath
              // 默认使用 webpackOptions.output中的publicPath
              // publicPath的配置,和plugins中设置的filename和chunkFilename的名字有关
              // 如果打包后,background属性中的图片显示不出来,请检查publicPath的配置是否有误
              publicPath: './',  
            },
          },  
          'css-loader'
        ],
    }]
  },
  plugins: [
    new MiniCssExtractPlugin({
            filename:"index.css" //输出的css文件名,默认以入口文件名命名(例如main.css)
        })
  ]
}

样式的提取是从资源入口开始的,以chunk为单位进行检索。 在实际开发中,是多模块的,每个模块都有各自的样式表。对于多样式文件的场景,可以对插件提取的CSS文件使用类似模板的命名方式。

// webpack.config.js
const path = require("path");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
  entry: "./src/index.js",
  output: {
    filename: "[name].js",
  },
  mode: "development",
  devServer: {
    static: {
      directory: path.join(__dirname, "public"),
    },
    compress: true,
    hot: true,
    port: 3000,
    open: true,
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader,
            options: {
              publicPath: "./",
            },
          },
          "css-loader",
        ],
      },
    ],
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: "[name].css",
      chunkFilename: "[id].css",
    }),
  ],
};

示例工程

https://gitee.com/zero_79152105/webpack-vblog

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/webpack-css-build.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2022年11月23日
下一篇 2022年11月25日

相关推荐

  • Java自学之String类

    在实际项目开发中,String是一个必须使用的程序类,可以说是项目的核心组成类。在Java程序里所有的字符串都要求使用【’‘】进行定义,同时也可以利用【+】实现字符串的连接处理。 …

    2020年11月30日
    1.4K
  • 封装JDBC工具类,连接MySQL数据库

    JDBC是由java编程语言编写的类及接口组成,同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API,并支持SQL语言。利用JDBC可以将JAVA代码连接到orac…

    2022年3月31日
    888
  • windows下使用Docker Desktop安装nacos与mysql,实现互通访问

    1、命令行拉取MySQL镜像 打开命令提示符,运行以下命令安装mysql 2、运行mysql镜像,启动mysql实例 3、命令行拉取nacos镜像 4、运行nacos镜像,启动na…

    2022年10月27日
    467
  • 两栏布局之左侧固定,右侧自适应的实现方法

    实现左侧固定,右侧自适应的两栏布局的方法有很多。其中经常用到的有float方法、BFC方法、CSS3的flex布局及grid布局。并非所有的布局都会在开发中使用,但是其中也会涉及一些知识点。

    2018年10月13日
    2.6K
  • MyBatis之MyBatis-Generator标签配置及意义

    DTD 标签 <generatorConfiguration/>: 根标签,所有的配置都必须在该标签内配置;没有属性 <properties/>: 主要引用外部的pro…

    2019年12月27日
    1.9K
  • JAVA学习之多线程知识点整理

    1、什么是进程?什么是线程? 进程是一个应用程序。线程是一个进程中的执行场景或者执行单元。一个进程可以启动多个线程。进程之间内存独立不共享。同一个进程中的线程之间,堆内存和方法区内…

    2020年6月19日
    1.3K
  • css布局基础总结

    前端css布局知识繁杂,实现方式多种多样。想写出高效、合理的布局,必须以深厚的css基础为前提。为了方便记忆和复习,将css布局要点记录如下。内容较多,应用方面说的不太详细,但都是…

    2018年9月13日
    2.3K
  • MyBatis配置之properties属性详解

    之前写了一篇《如何搭建MyBatis开发环境》,通过一个简单的实例讲解了关于搭建MyBatis的开发环境,这篇将详细讲解MyBatis的配置。 MyBatis配置文件的层次结构 这…

    2022年4月18日
    795
  • 日常开发 26 个常见的 JavaScript 代码优化方案

    1、NULL、Undefined、”【空】检查 我们在创建新变量赋予一个存在的变量值的时候,并不希望赋予null或undefined,我们可以采用以下简洁的赋值方式。 …

    2021年2月22日
    1.3K
  • 如何封装VUE组件库?

    之前一直在使用Angular开发项目,也封装过Angular组件。由于种种原因,现需要转战VUE。好在本人有扎实的实战经验,结合各位网络大神整理的经验,现总结一篇关于封装VUE组件…

    2019年7月31日
    2.4K