• webpack4 css modules


    demo 代码点此,webpack4 中通过 css-loader 开启 css 模块化, 开始前先做点准备工作。

    不了解 css 模块化的,可以前往查看github_css_modules.

    准备工作


    安装 webpack:

    npm init -y
    npm i -D webpack webpack-cli css-loader
    

    创建 webpack.config.js 进行配置:

    const path = require('path');
    const MiniCssExtractPlugin = require('mini-css-extract-plugin');
    const HtmlWebpackPlugin = require('html-webpack-plugin');
    
    module.exports = {
      entry: {
        main: './src/index.js'
      },
      module: {
        rules: [
          // 不在 node_modules 中的 css,开启 css modules
          {
            test: /.css$/,
            exclude: /node_modules/,
            use: [
              MiniCssExtractPlugin.loader,
              {
                loader: 'css-loader',
                options: {
                  /* 以前版本是通过 true 开启,相关配置接着写
                  	modules: true
                  	localIdentName: '[name]__[local]--[hash:base64:5]'
                 	*/
                  // 现在是给 modules 一个 options 对象开启
                  modules: {
                    // 重新生成的 css 类名
                    localIdentName: '[name]__[local]--[hash:base64:5]'
                  }
                }
              }
            ]
          },
           // 在 node_modules 中的 css,不开启
          {
            test: /.css$/,
            include: /node_modules/,
            use: [
              MiniCssExtractPlugin.loader, 'css-loader']
          }
        ]
      },
      plugins: [
        new HtmlWebpackPlugin({
          template: path.resolve(__dirname, './src/index.html'),
          filename: 'index.html'
        }),
        new MiniCssExtractPlugin({
          filename: '[name].[hash].css'
        })
      ],
      output: {
        filename: '[name].[hash].bundle.js',
        path: path.resolve(__dirname, './dist')
      }
    }
    

    更多 css-loader 的配置建议前往 github_css-loader 查看,因为版本更新后,配置可能会有变。

    编写 css


    配置完 webpack,写 css 时要使用相关语法,因为是通过 webpack 打包时进行编译,重新生成新的 css 类名来防止全局变量名污染的。

    **注意: css modules 只针对类、Id选择器生效,不会对标签选择器进行模块化。 **

    /* 全局样式 */
    :global(.header) {
      color: #696969;
      background-color: #fff;
    }
    
    :global .main {
      color: #363636;
      background-color: #fff;
    }
    
    /* less 等预处理语言可以这样写 */
    /* :global {
      .footer {
        color: #303030;
        background-color: #fff;
      }
    } */
    
    
    /* 局部样式 */
    :local(.header) {
      color: red;
      background-color: #c2b1b1;
    }
    
    :local(.main) {
      color: yellow;
      background-color: rgb(136, 96, 96);
    }
    
    :local(.footer) {
      color: blue;
      background-color: #929292;
    }
    

    编译后的 css 代码:

    /* 全局样式 */
    .header {
      color: #696969;
      background-color: #fff;
    }
    
    .main {
      color: #363636;
      background-color: #fff;
    }
    
    /* less 等预处理语言可以这样写 */
    /* :global {
      .footer {
        color: #303030;
        background-color: #fff;
      }
    } */
    
    
    /* 局部样式 */
    .index__header--1JD7j {
      color: red;
      background-color: #c2b1b1;
    }
    
    .index__main--1j9-Y {
      color: yellow;
      background-color: rgb(136, 96, 96);
    }
    
    .index__footer--gJKjp {
      color: blue;
      background-color: #929292;
    }
    

    使用


    因为 css 类名是重新编译后的,所以使用时不能直接使用原 css 类名,要通过 import 语法使用。

    import styles from './index.css';
    
    export const Header = () => {
      return `
        <h1 class=${styles.header}>header</h1>
      `
    }
    

    在 html 里面是这样的:

    <h1 class="index__header--1JD7j">header</h1>
    
  • 相关阅读:
    队列加分项(选作,根据博客质量加1-5分)(补博客)
    队列课下作业(补博客)
    20162319 2017-2018-20162319 《程序设计与数据结构》第7周学习总结
    20162319 补博客——用数组实现循环队列 06.第六周
    20162319 补博客——排序课下作业
    20162319 2017-2018-20162319 《程序设计与数据结构》第5周学习总结
    20162319 2017-2018-20162319 《程序设计与数据结构》第6周学习总结
    20162319 第二学期第一次实验:线性表的应用
    20162314 Experiment 2
    20162314 《Program Design & Data Structures》Learning Summary Of The Seventh Week
  • 原文地址:https://www.cnblogs.com/guolao/p/11830098.html
Copyright © 2020-2023  润新知