检测 CSS Modules/React 中不存在的 classNames 的使用

IT技术 javascript reactjs css-modules
2021-05-18 00:36:43

在我的react项目中,如果我使用来自 css module文件的一些不存在的 className,

 // mycss.modules.scss

.thing { color: red }

// index.jsx

import styles from mycss.modules.scss

<div className={styles.otherThing}>Some div</div>

// Browser would return:

<div>Some div</div>

它悄悄地失败了,而没有让我知道这个类不存在。我如何检查这个类名是否存在并抛出错误。保存文件时,在构建期间收到错误会很棒。

4个回答

如果您对typescript解决方案持开放态度,我为您找到了一个 TS 插件。

typescript-plugin-css-modules

它可以styles使用可用键的类型信息填充对象。

您不必将整个项目切换到typescript,您可以// @ts-check在此文件的顶部添加指令以启用 TS 引擎设计时检查。

除非你想提出一个拉取请求来向 webpack 加载器本身添加像严格模式选项这样的东西,否则我认为你无能为力,因为它只是一个基础对象。一个简单的替代方法是 do styles.styleName.toString(),这样如果styleName未定义,它将抛出错误。

实际上在javascript代码中是可能的。但我认为 className 存在检查不是一个好主意。

document.styleSheets[].rules[].selectorText

原始链接如何确定 Javascript 是否存在 css 类?

将此函数添加到顶部:

// index.jsx
import styles from mycss.modules.scss

function strictStyles (clsName){
  if(styles[clsName]){
    return styles[clsName]
  }else{
    throw "CSS class doesn't exist";
  }
}

...
<div className={strictStyles(otherThing)}>Some div</div>
...