Description
Current behavior
We are about to release Quasar Framework CLI v2 (@quasar/app
), and really want to integrate fork-ts-checker new version.
We are testing it on real world (private) projects and I noticed an extreme (talking about some minutes, 18s vs 183s) slowdown of production compilation in a particular scenario, for which I cannot pin-point the cause.
I could use some guidance, because the behaviour I'm experiencing is pretty random and don't know how do debug it further.
Right now my instinct tells me there is something wrong with our configuration of v5 and the tsconfig.json file, probably because we add and configure the plugin into @quasar/app
and not into a webpack config file into the project root.
Or some kind of incompatibility with @typescript-eslint
pre v3
EDIT: nope, upgraded to v3 and problem persist. Also, clean test project didn't had problems with pre v3
Enabling typescript.profile
using the only configuration which avoids the slowdown (see below) produce no output.
Enabling typescript.profile
when the problem is present I got this
Parse Configuration: 0.03 s
Create Watch Compiler Host: 0.00 s
I/O Read: 0.13 s
Parse: 0.93 s
ResolveTypeReference: 0.04 s
ResolveModule: 0.90 s
Program: 2.12 s
Bind: 0.84 s
Check: 0.90 s
transformTime: 143.05 s
Reverting to v4.1.6
fixes the problem, so I'm fairly sure the problem is in the new major version (or our configuration).
This is how we internally enable TS support into the Quasar webpack chain: https://github.com/quasarframework/quasar/blob/9133883bb3f2a3764b697bad8ffc5e313502c4ea/app/lib/webpack/create-chain.js#L154-L182
Notice we always include vue ts support into the options via webpack chain as
typescript: {
extensions: {
vue: true
}
}
In Quasar configuration we allow the user to customize your plugin options like
supportTS: {
tsCheckerConfig: {
// ts-checker options
}
},
Into our starter kit we automatically setup the configuration depending on initial user choices: https://github.com/quasarframework/quasar-starter-kit/blob/19bd2ec30086d1086b7e44929bed71273d3d41a4/template/quasar.conf.js#L26-L33
Experiments till now
supportTS: true
With no eslint configuration, the problem persist
supportTS: {
tsCheckerConfig: {
eslint: {
enabled: true,
files: ['./src/**/*.ts', './src/**/*.js', './src/**/*.vue']
}
}
},
With eslint enabled and this eslint.files
glob patterns the problem is solved but I get the error below error, no lint error is displayed for Vue and TS files and typescript.profile
output is not shown.
All this stuff makes me think nothing is actually being processed and that's why there's no slowdown.
Error: No files matching '/home/----/src/**/*.js' were found.
Error: No files matching '/home/----/src/**/*.js' were found.
at FileEnumerator.iterateFiles (/home/----/node_modules/eslint/lib/cli-engine/file-enumerator.js:272:27)
at iterateFiles.next (<anonymous>)
at CLIEngine.executeOnFiles (/home/----/node_modules/eslint/lib/cli-engine/cli-engine.js:761:48)
at /home/----/node_modules/fork-ts-checker-webpack-plugin/lib/eslint-reporter/reporter/EsLintReporter.js:36:41
at Generator.next (<anonymous>)
at /home/----/node_modules/fork-ts-checker-webpack-plugin/lib/eslint-reporter/reporter/EsLintReporter.js:8:71
supportTS: {
tsCheckerConfig: {
eslint: {
enabled: true,
files: './src/**/*'
}
}
},
With eslint enabled and this eslint.files
glob patterns the problem persist and I get an error for any extension @typescript-eslint
cannot process and for all Vue files.
This last bit is strange, because Vue files are marked to be processed.
One more point on the "there's something strange with tsconfig.json" path.
Ex.
src/assets/icons/my-icon.svg
[unknown]: Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: src/assets/icons/my-icon.svg.
The extension for the file (.svg) is non-standard. It should be added to your existing "parserOptions.extraFileExtensions".
src/components/_fullscreen-dialog.scss
[unknown]: Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: src/components/_fullscreen-dialog.scss.
The extension for the file (.scss) is non-standard. It should be added to your existing "parserOptions.extraFileExtensions".
src/components/my-component.vue
[unknown]: Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
The file does not match your project config: src/components/my-component.vue.
The file must be included in at least one of the projects provided.
supportTS: {
tsCheckerConfig: {
eslint: {
enabled: true,
files: ['./src/**/*.ts', './src/**/*.vue']
}
}
},
With eslint enabled and this eslint.files
glob patterns the problem persist.
Miscellaneous info
The project tsconfig is in the project root folder and extends the preset provided by Quasar (https://github.com/quasarframework/quasar/blob/dev/app/tsconfig-preset.json)
{
"extends": "@quasar/app/tsconfig-preset",
"compilerOptions": {
"baseUrl": "."
}
}
I'm using Vue Composition API package (v0.5 right now), but the clean Quasar project I created uses it too and doesn't seems to be affected.
Expected behavior
Avoid slowdown.
Steps to reproduce the issue
I'm not able to replicate the problem with a fresh Quasar project using latest unreleased packages and starter kit.
Environment
- fork-ts-checker-webpack-plugin: 5.0.1
- typescript: 3.9.5
- eslint: 6.8.0
- webpack: 4.43
- os: Ubuntu 18.04