五、文件命名规范的工具——ls-lint

1,442 阅读4分钟

1 介绍

(注:本小节的内容基本上都来自官方文档的翻译和总结)

  • 简介

    • ls-lint 官方文档An extremely fast file and directory name linter. (一个极快的文件和目录名称 linter)
    • ls-lint 提供了简单且快速的方式,来为你的项目目录和文件名提供极快的命名规则约束。
  • key facts

    • 最小化的安装,只需要一个配置文件 (.ls-lint.yml/.ls-lint.yaml) 来编写简单的规则即可
    • 检测的目标是目录名和文件名。支持任意扩展名的文件,支持任意 unicode 字符。
    • Incredibly fast (难以置信地快):检测上千个文件和目录只需要毫秒级的时间。
    • 目前已被众多大型项目采用,如 Nuxt.js , Terser, Renovate
    • 几乎零第三方依赖。仅有 go-yamldoublestar 两个依赖
    • 支持众多平台,包括 Linux、MacOS、Windows 三大操作系统,并提供了 NPM 包,还可在 docker 中使用

2 安装

  • 你可以全局安装,也可以在项目中独立安装

    # 全局安装
    npm install -g @ls-lint/ls-lint
    yarn add -g @ls-lint/ls-lint
    pnpm install -g @ls-lint/ls-lint
    
    # 项目内安装
    npm install @ls-lint/ls-lint
    yarn add @ls-lint/ls-lint
    pnpm install @ls-lint/ls-lint
    
  • 运行 ls-lint

    ls-lint # 全局命令
    npx @ls-lint/ls-lint # npx 执行
    pnpx @ls-lint/ls-lint # pnpx 执行
    

    npm@9pnpm@7 执行这个命令的方式与 npx 和 pnpx 的执行方式不同,详情查阅 npm-execpnpm exec

3 配置

3.1 基础概念

  • 在项目的根目录下创建 .ls-lint.yml 文件,这个文件就是 ls-lint 的配置文件了,ls-lint 所有的配置都在这一个文件里编写

  • 规则

    • key 为文件扩展名或子文件扩展名,如.js, .d.ts

      • 特殊的一个 key:.dir 。这个 key 表示目录的命名规则
    • value 为规则,如 camelCase, PascalCase, kebab-case 等,支持正则表达式

      # example
      ls:
        .js: PascalCase
      
  • ls-lint 配置项分为两个块:

    • ls:这个块里定义了所有需要格式化的文件和目录的规则
    • ignore:这个块里定义了被忽略的文件和目录
  • ls

    • 该块下可以有任意个子块,每一个子块就是一个文件夹路径
    • 子块名称支持 glob 匹配
    • 该块下可以有任意条规则,这些规则对所有未忽略的目录下的文件有效
  • ignore

    • 该块下不支持子块

    • 该块下只需列出需要忽略的文件和文件夹即可

      ignore:
        - .git
        - node_modules
      

3.2 配置规则

  • 官方文档中提供了下面这个表格,来解释 ls-lint 支持的检测规则

    配置规则别名描述允许的字符
    regex名称必须符合指定的正则表达式满足正则表达式的字符
    lowercase名称里的字母必须全是小写字母、非字母字符
    camelcasecamelCase名称必须是 camelCase 风格字母、数字
    pascalcasePascalCase名称必须是 PascalCase 风格字母、数字
    snakecasesnake_case名称必须是 snake_case 风格小写字母、数字、下划线(_)
    screamingsnakecaseSCREAMING_SNAKE_CASE名称必须是 snake_case 的全大写风格大写字母、数字、下划线(_)
    kebabcasekebab-case名称必须是 kebab-case 风格小写字母、数字、中划线(-)
    pointcasepoint.case名称必须是 point.case 风格小写字母、数字、点(.)
    • 这些规则里最常用的是 camelCase, PascalCase, snake_casekebab-case
    • NestJS 项目里,point.case 也比较常用
  • 为指定文件配置多个规则

    • 可以通过 | 连接多个规则,来允许为同一类/个文件/文件夹指定允许的多个规则

      • 例如:.js: camelCase | kebab-case

3.3 CLI 选项

  • --debug

    • 将 debug 信息打印到命令行窗口,主要包括检测的、跳过的文件和文件夹
  • --warn

    • 将检测结果的 errors 视为 warnings ,将结果打印到命令行窗口,并且最终一定成功退出

1.3.4 我的配置

  • 我的项目是一个普通的前端 Vue3 项目,个人比较喜欢的配置如下
ls:
  .js: kebab-case
  .ts: kebab-case
  .json: kebab-case
  .vue: PascalCase
  .tsx: PascalCase
  .d.ts: kebab-case
  # 根据情况加入其它的配置项

ignore:
  - .git
  - node_modules
  # 可以加入其它需要忽略的文件夹和文件

  • 个人不建议为一个类型的文件指定多种风格的规则,这样不方便统一

4 使用

  • 通常,ls-lint 不会单独去使用,而是配合其它的工具一起使用,比如 lint-staged

  • 按照前面的步骤为项目安装好了 ls-lint 之后,就可以配合 lint-staged 使用了,只需要在 package.json 中加入下面的配置就可以了

    {
      "lint-staged": {
        "*.{js,jsx,ts,tsx,vue}": ["ls-lint", "eslint --fix" ],
        "*.{css,less,scss,vue}": ["ls-lint", "stylelint --fix"]
      }
    }
    

推荐将 ls-lint 命令放到最前面执行,因为这个命令执行特别快,比 eslint 等命令执行得快得多。
将这个命令放到最前面,能尽可能减少代码提交时规范化检测的时间。