• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

vite 更好的处理 css module的插件

武飞扬头像
优资园
帮助1

vite 实现类似webpack oneOf 的Css Module

背景
一个react的项目,如果使用css module 则需要.module.xx ,这样很不美观,而且繁琐,如果能类似webpack中的oneOf那使用起来就方便灵活了,那如何实现呢?

调研
查看官方文档:https://github.com/vitejs/vite/blob/main/packages/vite/src/node/plugins/css.ts 这个是vite处理css的插件,其实官方内置的是有的,如下代码所示,我们可以看到这个是使用postcss-modules插件来处理的,配置也是一样的

 if (isModule) {
    postcssPlugins.unshift(
      (await import('postcss-modules')).default({
        ...modulesOptions,
        getJSON(
          cssFileName: string,
          _modules: Record<string, string>,
          outputFileName: string
        ) {
          modules = _modules
          if (modulesOptions && typeof modulesOptions.getJSON === 'function') {
            modulesOptions.getJSON(cssFileName, _modules, outputFileName)
          }
        },
        async resolve(id: string) {
          for (const key of getCssResolversKeys(atImportResolvers)) {
            const resolved = await atImportResolvers[key](id)
            if (resolved) {
              return path.resolve(resolved)
            }
          }

          return id
        }
      })
    )
  }
学新通

但是vite官方的配置是只能处理.module.xx的文件,这个对于我们全部使用css module 来说是有点不够用的了,那于是我便写了这个插件,来满足项目的需要。

功能:

  1. 文件名称不需要增加.module前缀
  2. 可以对不通目录下的scss 文件使用不同的css module 配置

解决问题

  1. 文件名称更简洁
  2. 配置方便,处理css moduel更灵活,可以很好的去覆盖公用组件中的样式
  3. 支持打包

使用:

安装

pnpm add -D vite-plugin-filter-css-moudle
pnpm i -D vite-plugin-filter-css-moudle

使用

import vitePluginTransformFilterCssModule from 'vite-plugin-filter-css-moudle';
export default <UserConfig>{
 plugins: [
    vitePluginTransformFilterCssModule([
      {
        test: /src\/components\/([a-z\-] \/)*[a-z\-] \.s[ac]ss$/i,
        modules: {
          generateScopedName: 'prefix_[local]',
        },
      },
      {
        test: /\.s[ac]ss$/i,
        modules: {
          generateScopedName: '[path]___[local]___[hash:base64:5]',
        },
      },
    ])
 ]
}
学新通

注意

vitePluginTransformFilterCssModule 数组中按从上到下的顺序优先级处理,css-module的配置请参考postcss-modules 配置

温馨提示:如果能解决您的问题,那很高兴能帮助您,请帮忙点个star支持一下 viteplugin-filter-css-module

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcjegb
系列文章
更多 icon
同类精品
更多 icon
继续加载