如何对项目中的文件和目录命名进行约束
不知道大家有没有维护过陈年老代码的经历,我曾经看过一个项目,维护代码的人都换过好多个的那种。因为缺少一些规范约束,编码风格、文件命名等都带着浓重的个人风格。
对于一个需要多人协作的项目来说,我们还是需要有一些编码约束来提高协作效率的。
今天我们来介绍一个工具,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 。