不知道大家有没有维护过陈年老代码的经历,我曾经看过一个项目,维护代码的人都换过好多个的那种。因为缺少一些规范约束,编码风格、文件命名等都带着浓重的个人风格。

对于一个需要多人协作的项目来说,我们还是需要有一些编码约束来提高协作效率的。

今天我们来介绍一个工具,ls-lintopen in new window 用于对文件和目录名称进行规范约束。

安装

在项目根目录下安装依赖包。

yarn add @ls-lint/ls-lint
1

配置

安装完成后,在项目根目录下配置一个配置文件 .ls-lint.yml。配置文件非常简单,分成两个部分:

ls: 
  ...
ignore: 
  ...
1
2
3
4

ls 下面配置对哪些文件使用规则,支持文件名、目录、正则等多种配置方式。ignore 是一个数组,定义需要忽略的文件或者目录。

下面是一个配置样例,注释是每个用法的具体说明:

ls:
  .js: kebab-case # 对所有 JS 文件使用 kebab-case 形式
  .ts: kebab-case | camelCase | PascalCase # 对所有 TS 文件使用 kebab-case 或者 camelCase 或者 PascalCase 形式
  .d.ts: kebab-case # 对所有 .d.ts 文件使用 kebab-case 形式

  packages/src:
    .dir: camelCase # 对当前目录和所有子目录使用 camelCase
    .js: camelCase # 对 packages/src 下的 JS 文件使用 camelCase,会覆盖上面的全局配置

  models:
    .js: PascalCase # models 目录下的 JS 文件使用 PascalCase

  packages/*/src: # * 号匹配除了目录分隔符以外的任意字符
    .js: kebab-case

  packages/**/templates: # ** 号匹配包含目录分隔符以外的任意字符
    .html: kebab-case

  packages/*/{src,tests}: # 匹配 package 下下一级目录中的 src 或 tests 目录中的文件
    .js: kebab-case

ignore:
  - .git # 忽略 .git 目录
  - node_modules # 忽略 node_modules 目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

注意,目录匹配在 ignore 中不支持。

规则

上面的例子,除了展示各种支持的匹配文件或目录的方式以外,还配置了这些名称要满足哪些规则要求。

下面的表格展示了所有支持的规则:

规则别名描述
正则-满则正则表达式^{pattern}$
lowercase-文件或目录名必须全小写,数字除外,如 abeautifulname
camelcasecamelCase文件和目录名必须为驼峰式,且只支持字母和数字,如 aBeautifulCase
pascalcasePascalCase文件和目录名必须满足帕斯卡命名法,且只支持字母和数字,如 ABeautifulName
snakecasesnake_case文件和目录名必须为下划线联接,且只支持字母、数字和下划线,如 a_beautiful_name
kebabcasekebab-case文件和目录名必须为中划线联接,且只支持字母、数字和中划线,如 a-beautiful-name
pointcasepoint.case文件和目录名必须满足点文件规范,且只支持字母、数字和点,如 a.beautiful.name

其中正则表达式要多说一句,即我们配置了模式为 pattern,最终生成的正则表达式是 ^{pattern}$

比如:

ls:
  .js: regex:[a-z0-9]+ # 最终的正则是 ^[a-z0-9]+$
  .ts: regex:Schema(\.test)? | regex:Resolver(\.test)? # 支持配置多个正则,使用 | 分割,但是这种情况下就不能再使用正则中的 | 符号了。
1
2
3

小结

今天我们介绍了一个对文件和目录名称进行约束的工具 ls-lint。通过样例详细说明了各种用法和支持的约束规则。通过这个工具,我们可以保证代码中文件和目录命名是统一风格的。

关注微信公众号,获取最新推送~

加微信,深入交流~