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

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

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

安装

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

yarn add @ls-lint/ls-lint

配置

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

ls: 
  ...
ignore: 
  ...

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 目录

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

规则

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

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

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

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

比如:

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

小结

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

常见面试知识点、技术解决方案、教程,都可以扫码关注公众号“众里千寻”获取,或者来这里 https://everfind.github.io

众里千寻

版权声明:本文为everfind原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/everfind/p/ls-lint.html