首页 > 解决方案 > 如何使用带有 CSS 模块的 Webpack 4 摇树移除未使用的类?

问题描述

有人做了一个很好的例子,根据是否使用 JS 模块来删除未使用的 CSS,但我试图弄清楚如何从组件中实际未使用的包中删除未使用的 CSS 类。

例子

// Sub.scss
.sub-container {
  background-color: green;
}

.unused-junk {
  color: blue;
}


// Sub.js
import React from "react";

import styles from "./Sub.scss";

export default function Sub() {
  return <div className={styles.subContainer}>Hi from sub.</div>;
}


// App.scss
.app-container {
  background-color: red;
}


// App.js
import React from "react";
import ReactDOM from "react-dom";

import Sub from "./Sub";
import styles from "./App.scss";

function App() {
  return (
    <div className={styles.appContainer}>
      Hi from app.
      <Sub />
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));

// webpack.config.js
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
  entry: "./src/App.js",
  output: {
    path: __dirname + "/build",
    filename: "bundle.js"
  },
  module: {
    rules: [
      {
        test: /\.js/,
        loader: "babel-loader",
        include: __dirname + "/src",
        query: {
          presets: ["react"]
        }
      },
      {
        test: /\.scss/,
        use: [
          MiniCssExtractPlugin.loader,
          {
            loader: "css-loader",
            options: {
              modules: true,
              camelCase: true,
              importLoaders: 1,
              localIdentName: "[name]--[local]--[hash:base64:5]"
            }
          },
          "sass-loader"
        ],
        include: __dirname + "/src"
      }
    ]
  },
  plugins: [
    new CopyWebpackPlugin([{ from: `src/index.html`, to: "index.html" }]),
    new MiniCssExtractPlugin({
      filename: "[name].css",
      chunkFilename: "[id].css"
    })
  ]
};


// CSS bundle
.App--app-container--3wd6W {
  background-color: red; }

.Sub--sub-container--38uqh {
  background-color: green; }

.Sub--unused-junk--2-h5r {
  color: blue; }

有没有办法.unused-junk从捆绑包中摇树类?

标签: reactjswebpackcss-loadercss-modules

解决方案


推荐阅读