ant-design / ant-design-pro

👨🏻‍💻👩🏻‍💻 Use Ant Design like a Pro!
https://pro.ant.design
MIT License
36.51k stars 8.15k forks source link

🧐[问题 | question] TS 语法有 error 提示,但是 pre-commit 提交的时候没有对 TS 语法进行异常提示 #10598

Closed NARUTOyuyang closed 1 year ago

NARUTOyuyang commented 1 year ago

🧐 问题描述 | Problem description

TS 语法有 error 提示,但是 pre-commit 提交的时候没有对 TS 语法进行异常提示,希望对 TS 没有标注类型的错误提示,能在 pre-commit 中也能出现 error 提示

💻 示例代码 | Sample code

🚑 其他信息 | Other information

image

OS:

Node:

浏览器 | browser:

chenshuai2144 commented 1 year ago

TAutomatically replying with ChatGPT can be attempted, but it cannot be guaranteed to be completely accurate and may not fully address all issues. Please feel free to reply if you have any further questions or concerns. 此回复基于 ChatGPT 自动生成,可以尝试下方案,官方人员会在一定时间后继续继续处理。

🌟 解决方案 | Solution

这个问题可能与lint-staged配置有关,需要将lint-staged配置文件中的 TypeScript 校验部分合并到husky钩子中。以下是可能的解决方案。

首先,需要安装 TypeScript 的相关依赖:

npm install -D typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser

其次,需要在项目根目录下创建 .eslintrc.js 文件:

module.exports = {
  parser: "@typescript-eslint/parser",
  plugins: ["@typescript-eslint"],
  extends: [
    "eslint:recommended",
    "plugin:@typescript-eslint/recommended",
    "prettier/@typescript-eslint"
  ],
  rules: {
    "@typescript-eslint/explicit-module-boundary-types": 0
  }
};

然后,在 package.json 中添加以下的配置:

"husky": {
  "hooks": {
    "pre-commit": "lint-staged"
  }
},
"lint-staged": {
  "**/*.ts": [
    "eslint --ext .ts"
  ]
},

结尾注意事项:需要将 .eslintignore 文件删除或对其中的文件进行修改,以便对 TypeScript 文件进行校验。

最后的配置应该可以在提交前对 TS 进行校验,如果有错误则拒绝提交并输出错误。

参考文档:

chenshuai2144 commented 1 year ago

pre-commit 不会触发 tsc,你可以按照上面的步骤增加一下 tsc 。

我们 tsc 是用 build ci 来拦住的

NARUTOyuyang commented 1 year ago

pre-commit 不会触发 tsc,你可以按照上面的步骤增加一下 tsc 。

我们 tsc 是用 build ci 来拦住的

这是我的 tsconfig.json 文件,在代码编辑过程中是会校验的,但是 pre-commit 却没有生效

{
  "compilerOptions": {
    "outDir": "build/dist",
    "module": "esnext",
    "target": "esnext",
    "lib": ["esnext", "dom"],
    "sourceMap": true,
    "baseUrl": ".",
    "jsx": "react-jsx",
    "resolveJsonModule": true,
    "allowSyntheticDefaultImports": true,
    "moduleResolution": "node",
    "forceConsistentCasingInFileNames": true,
    "noImplicitReturns": true,
    "suppressImplicitAnyIndexErrors": true,
    "noUnusedLocals": true,
    "allowJs": true,
    "skipLibCheck": true,
    "experimentalDecorators": true,
    "strict": true,
    "paths": {
      "@/*": ["./src/*"],
      "@@/*": ["./src/.umi/*"]
    }
  },
  "include": [
    "mock/**/*",
    "src/**/*",
    "playwright.config.ts",
    "tests/**/*",
    "test/**/*",
    "__test__/**/*",
    "typings/**/*",
    "config/**/*",
    ".eslintrc.js",
    ".stylelintrc.js",
    ".prettierrc.js",
    "jest.config.js",
    "mock/*"
  ],
  "exclude": ["node_modules", "build", "dist", "scripts", "src/.umi/*", "webpack", "jest"]
}

.eslintrc.js

module.exports = {
  extends: [require.resolve('@umijs/fabric/dist/eslint')],
  globals: {
    ANT_DESIGN_PRO_ONLY_DO_NOT_USE_IN_YOUR_PRODUCTION: true,
    page: true,
    REACT_APP_ENV: true,
  },
  rules: {
    '@typescript-eslint/no-unused-vars': ['error'],
    'react/self-closing-comp': ['error'],
  },
};

.package.json

"lint-staged": {
    "**/*.less": "stylelint --syntax less",
    "**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js",
    "**/*.{js,jsx,tsx,ts,less,md,json}": [
      "prettier --write"
    ]
  },
NARUTOyuyang commented 1 year ago

pre-commit 不会触发 tsc,你可以按照上面的步骤增加一下 tsc 。

我们 tsc 是用 build ci 来拦住的

根据你给的配置不生效,本地编辑器会根据 tsconfig.json 生效,但是 pro-commit 还是不会生效