[关闭]
@Dale-Lin 2022-03-19T14:59:29.000000Z 字数 2215 阅读 378

cssLoader

webpack5


css-loader 用于处理 css 文件中的 url()@import 等语法在打包后的路径。

options

options.modules

options.modules 可以用一个对象来配置规则:

  1. {
  2. auto: true (对 `/\.module\.\w+$/i.test(filename) 启用 CSS modules)
  3. | undefined(对全部文件启用,默认)
  4. | false(对全部文件关闭)
  5. | RegExp(对匹配的文件名启用),
  6. mode: 'local'(只对本地的 class/id 编译,默认)
  7. | 'global'(对全局的 class/id 编译,即 CSS 声明作用域变成全局的了)
  8. localIdentName: '[hash:base64]'(默认)
  9. 支持的 webpack template strings:
  10. - [name]: 文件名,不包括扩展名
  11. - [folder]: 资源相对于 localIdentContext compiler.context 的文件夹
  12. - [path]: 资源相对于 localIdentContext compiler.context 的路径,不包括文件名
  13. - [file]: [path] + [name]
  14. - [ext]: 扩展名,前面带 . 符号
  15. - [hash]: hash string,基于 localIdentHashSalt, localIdentHashFunction, localIdentHashDigest, localIdentHashDigestLength,
  16. localIdentContext, resourcePath, exportName 生成
  17. - [<hashFunction>:hash:<hashDigest>:<hashDigestLength>]: 自定义 hash 设置
  18. - [local]: 原始的 class
  19. 推荐设置:
  20. - [path][name]__[local] 开发模式
  21. - [hash:base64] 生产模式
  22. localIdentContext: 自定义 loader 处理 localIdentName 的上下文目录,默认等于 compiler.context,例如设成 path.resolve(__dirname, "src")
  23. nameExport: boolean(支持单独导出 CSS nameclass 会转成驼峰导出,默认 false
  24. importLoaders: number
  25. 设置 css-loader 处理 `@import` CSS 资源前,需要先应用的 loader 有几个。例如用了 less + postcss,那就需要先应用 2 个。
  26. }

localIdentName 中 [path][name] 会把 / . 等符号转成 - 来拼接。

推荐设置

生产环境推荐用 mini-css-extract-plugin 抽出 CSS,可以在浏览器请求资源时并行下载;开发环境使用 style-loader 生成 标签注入 DOM 效率更高。

不要同时使用 style-loader 和 mini-css-extract-plugin 。

  1. // webpack.config.js
  2. const MiniCssExtractPlugin = require("mini-css-extract-plugin")
  3. const devMode = process.env.NODE_ENV !== "production"
  4. module.exports = {
  5. module: {
  6. rules: [
  7. {
  8. test: /\.(le|c)ss$/i,
  9. use: [
  10. devMode ? "style-loader" : MiniCssExtractPlugin.loader,
  11. "css-loader",
  12. "postcss-loader",
  13. "less-loader"
  14. ],
  15. exclude: /node_modules/
  16. }
  17. ]
  18. },
  19. plugins: [].concat(devMode ? [] : [new MiniCssExtractPlugin()])
  20. }

Assets

嵌入的小图片(PNG/JPG/GIF/SVG/字体文件)可以被处理成 Data URLs,大文件可以被复制到 output 目录:

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.css$/i,
  6. use: ["style-loader", "css-loader"],
  7. },
  8. {
  9. test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)$/i,
  10. // https://webpack.js.org/guides/asset-modules/
  11. type: "asset"
  12. }
  13. ]
  14. }
  15. }

PostCSS 和 Less

使用 less 和 postcss:

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.(le|c)ss$/i,
  6. use: [
  7. "style-loader",
  8. {
  9. loader: "css-loader",
  10. options: {
  11. importLoaders: 2
  12. }
  13. },
  14. {
  15. loader: "postcss-loader",
  16. options: {
  17. plugins: () => [postcssPresetEnv({ stage: 0 })]
  18. }
  19. },
  20. "less-loader"
  21. ]
  22. },
  23. {
  24. test: /\.(png|jpe?g|gif|svg|eot|ttf|woff|woff2)$/i,
  25. // https://webpack.js.org/guides/asset-modules/
  26. type: "asset"
  27. }
  28. ]
  29. }
  30. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注