Я настраиваю линтер с тайпчекингом для монорепозитория. Делаю по
этой инструкции. Все работает, но есть ощущение, что подтормаживает. Например, команда проверки тестового файла из одной строки кода занимает секунд 15:
npx eslint ./packages/frontend/Test.ts
Проект не большой (20 файлов, меньше 1500 строк кода на TS). Структура моего репо:
- packages
- - backend
- - - Test.ts
...
- - - tsconfig.json
- - frontend
...
- - - tsconfig.json
- .eslintrc.json
- .eslintignore
- tsconfig.json
Вот мой главный файл .eslintrc:
module.exports = {
root: true,
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint'],
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:@typescript-eslint/recommended-requiring-type-checking',
'prettier',
],
parserOptions: {
tsconfigRootDir: '/home/romaro/react-ssr/packages',
sourceType: 'module',
ecmaVersion: 2021,
project: ['backend/tsconfig.json', 'frontend/tsconfig.json'],
},
rules: {
semi: ['error', 'always'],
quotes: ['error', 'single'],
},
};
.eslintignore:
**/node_modules/**
babel.config.js
.eslintrc.cjs
Корневой tsconfig:
{
"compilerOptions": {
"rootDir": ".",
"noUnusedLocals": true,
"noUnusedParameters": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"exactOptionalPropertyTypes": true,
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitOverride": false,
"noImplicitReturns": true,
"strict": true,
"useUnknownInCatchVariables": true,
"noImplicitThis": true,
"noPropertyAccessFromIndexSignature": true,
},
"references": [
{
"path": "./packages/backend"
},
{
"path": "./packages/frontend"
}
],
"exclude": [
"node_modules"
],
}
Пример проектного конфига:
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"strictPropertyInitialization": false,
"outDir": "_dist",
"target": "ESNext",
"moduleResolution": "Node",
"allowSyntheticDefaultImports": true,
"useUnknownInCatchVariables": false,
"composite": true,
"declaration": true,
"declarationMap": true
},
"include": [
"**/*"
],
"exclude": [
"_dist"
]
}
Манифест:
{
"name": "react-ssr",
"version": "1.0.0",
"description": "",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Roman R",
"license": "ISC",
"dependencies": {
"fastify": "^4.0.0-rc.3",
"handlebars": "^4.7.7"
},
"devDependencies": {
"@types/node": "^17.0.36",
"@typescript-eslint/eslint-plugin": "^5.27.0",
"@typescript-eslint/parser": "^5.27.0",
"eslint": "^8.17.0",
"eslint-config-prettier": "^8.5.0",
"prettier": "^2.6.2"
}
}
Есть ощущение, что линтер выполняет какую-то лишнюю работу. Или это нормальное время сборки? Повторюсь, что проект не большой.
Так же замечал, что в некоторых монорепозиториях (на том же nestjs) настройка ведется через overrides. Это как-то влияет на производительность иди дело вкуса?