目前,css代码被css-loader转换后,交给style-loader进行处理

style-loader使用的方式是一段js代码,将样式加入到style元素中

而实际开发中,我们往往希望依赖的最终样式形成一个css文件

此时需要一个库: mini-css-extract-plugin

该库提供了一个plugin和一个loader

  • plugin: 主要负责生成css文件
  • loader: 负责记录要生成的css的文件内容,同时导出开启css-module后的对象

使用方式

  1. const MiniCssExtractPlugin=require('mini-css-extract-plugin');
  2. module.exports={
  3. module:{
  4. rules:[
  5. {test:/\.css$/,use:[MiniCssExtractPlugin.loader,"css-loader?modules"]}
  6. ]
  7. },
  8. plugin:[new MiniCssExtractPlugin()]
  9. }

配置生成的文件名

同output.filename的含义一样,即根据chunk生成样式的文件名

配置生成文件名,例如```[name].[content:5].css

默认情况下,每个chunk对应一个css

  1. const HtmlWebpackPlugin = require("html-webpack-plugin")
  2. var { CleanWebpackPlugin } = require("clean-webpack-plugin")
  3. const MiniCssExtractPlugin = require("mini-css-extract-plugin")
  4. const { chunk } = require("lodash")
  5. module.exports = {
  6. mode: "development",
  7. entry: {
  8. main: "./src/index.js",
  9. other: "./src/other.js"
  10. },
  11. output: {
  12. filename: "js/[name].[chunkhash:5].js",
  13. publicPath: "/"
  14. },
  15. module: {
  16. rules: [
  17. {
  18. test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader?modules"]
  19. },
  20. {
  21. test: /\.jpeg$/, use: {
  22. loader: "file-loader",
  23. options: {
  24. name: "img/[hash:5].[ext]"
  25. }
  26. }
  27. }
  28. ]
  29. },
  30. devServer: {
  31. open: true
  32. },
  33. plugins: [
  34. new CleanWebpackPlugin(),
  35. new HtmlWebpackPlugin({
  36. template: "./public/index.html",
  37. chunks: ['main']
  38. }),
  39. new HtmlWebpackPlugin({
  40. template: "./public/other.html",
  41. chunks: ['other'],
  42. filename: 'other.html'
  43. }),
  44. new MiniCssExtractPlugin({
  45. filename: "css/[name].[contenthash:5].css"
  46. })
  47. ]
  48. }