Build-In-Color

内置颜色约束

在项目中,为了统一对齐设计侧给的基础颜色,基本会书写单独的文件使用 js 变量来定义项目中的基础颜色,抑或是 css 变量,例如:

export const Grey11 = '#4C5E70';
export const Info6 = '#568FB2';
export const Brand1 = '#F2F5FC';
.root {
  --grey11: #f6f6fe;
  --info6: #568FB2;
  --brand1: #F2F5FC;
}

而当我们在日常开发时,可能会直接将颜色编号书写到代码中,例如:

const Page = <span style={{ color: '#568FB2' }}>this is a title</span>

const StyledTotalCnt = styled.span`
  color: #4C5E70;
`;

但这样的话,当项目基础颜色变更时,项目中会遗留大量的错误颜色,无法做到同步更新

而开启此插件后,可以自动检测代码中是否有内置颜色,如果有,会将其修复为项目中定义该颜色的变量形式,并将变量自动引入

修复为:

const Page = <span style={{ color: Info6 }}>this is a title</span>

const StyledTotalCnt = styled.span`
  color: ${Grey11};
`;
const Page = <span style={{ color: 'var(--info6)' }}>this is a title</span>

const StyledTotalCnt = styled.span`
  color: var(--grey11);
`;

Usage

此插件支持两种模式: js 变量模式与 css 变量模式,以 mode 区分,具体配置如下:

默认为 css 模式,可以只传递颜色映射

若需要 js 模式,需要传递变量引入的路径,并且配置 modevariable,如下:


const COLOR_MAPPING_JS = {
  '#4C5E70': 'Grey11',
  '#568FB2': 'Info6',
  '#F2F5FC': 'Brand1'
}

const COLOR_MAPPING_CSS = {
  '#4C5E70': '--grey11',
  '#568FB2': '--info6',
  '#F2F5FC': '--brand1'
}

// js 变量模式
module.exports = {
  plugins: ['@aoviz'],
  rules: [
    '@aoviz/build-in-color': ['warn', COLOR_MAPPING_JS, {
      mode: 'variable',
      path: '@libs/colors'
    }],
  ]
}

// css 变量模式
module.exports = {
  plugins: ['@aoviz'],
  rules: [
    '@aoviz/build-in-color': ['warn', COLOR_MAPPING_CSS],
  ]
}

@libs/colors 表示当前颜色值变量应从哪里引入,COLOR_MAPPING 表示当前颜色值与变量的映射关系。