首页 > 解决方案 > lint-staged 为不同的文件夹运行不同的命令

问题描述

我的项目文件夹设置了两个子目录,frontendbackend分别存放代码。

因此在根文件夹中我有:

- backend
    - package.json
    - other backend codes
- frontend
    - package.json
    - other frontend codes
- package.json

在根的 package.json 中,我有:

  "scripts": {
    "frontend:lint": "cd ./frontend && npm run lint && cd ..",
    "backend:lint": "cd ./backend && npm run lint && cd .."
  },
  "devDependencies": {
    "husky": "4.3.8",
    "lint-staged": "10.5.3"
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "frontend/**/*.{ts, tsx, json, html}": [
      "npm run frontend:lint"
    ],
    "backend/**/*.{ts, json}": [
      "npm run backend:lint"
    ]
  }

但是,如果我这样做git add并且git commit在根级别上,它会一直说No staged files match any configured task.

我已经查看了两个子 package.json 并且它们都有效。我不确定如何配置 lint-staged 来过滤文件。

标签: javascripttypescriptlint-staged

解决方案


这里给出了如何定位文件的一些解释:https ://www.npmjs.com/package/lint-staged#user-content-filtering-files

它可能不适用于您的情况,因为您的配置提供了多种文件类型,但只是将其标记为一种可能性,有一个“<a href="https://github.com/okonet/lint-staged/issues/ 953" rel="nofollow noreferrer">Lint-staged 任务不会运行,如果使用花括号指定单个文件类型,例如 *.{js} ”票lint-staged在合作者评论的回购中打开:

我们micromatch用于 glob,这听起来像是图书馆中的一个问题。

也许这个问题进一步延伸。我也遇到了这No staged files match any configured task.条消息,对我来说,将jsx扩展添加到配置中修复了它。

最初我有:

  "lint-staged": {
    "**/*.{js}": [
      "eslint --fix"
    ]
  }

修改以下内容后,它工作正常:

  "lint-staged": {
    "**/*.{js,jsx}": [
      "eslint --fix"
    ]
  }

推荐阅读