fix(vue): install @typescript-eslint/parser when generating project using it (#31008)

## Current Behavior

Vue and Nuxt projects using ESLint with flat config generate projects
using the `@typescript-eslint/parser` but don't install the package.
This can result in an error if the package has not been installed
before.

## Expected Behavior

Vue and Nuxt project generators should install the
`@typescript-eslint/parser` if they generate ESLint configuration that
uses it.

## Related Issue(s)

Fixes #
This commit is contained in:
Leosvel Pérez Espinosa 2025-05-02 22:36:41 +02:00 committed by GitHub
parent 49e71817f2
commit ada3f47338
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 8 deletions

View File

@ -1,6 +1,7 @@
import { Tree } from 'nx/src/generators/tree'; import { Tree } from 'nx/src/generators/tree';
import type { Linter as EsLintLinter } from 'eslint'; import type { Linter as EsLintLinter } from 'eslint';
import { Linter, LinterType, lintProjectGenerator } from '@nx/eslint'; import { Linter, LinterType, lintProjectGenerator } from '@nx/eslint';
import { typescriptESLintVersion } from '@nx/eslint/src/utils/versions';
import { joinPathFragments } from 'nx/src/utils/path'; import { joinPathFragments } from 'nx/src/utils/path';
import { import {
addDependenciesToPackageJson, addDependenciesToPackageJson,
@ -43,6 +44,10 @@ export async function addLinting(
}); });
tasks.push(lintTask); tasks.push(lintTask);
const devDependencies = {
'@nuxt/eslint-config': nuxtEslintConfigVersion,
};
if (isEslintConfigSupported(host, options.projectRoot)) { if (isEslintConfigSupported(host, options.projectRoot)) {
editEslintConfigFiles(host, options.projectRoot); editEslintConfigFiles(host, options.projectRoot);
@ -65,6 +70,7 @@ export async function addLinting(
}, },
} as unknown // languageOptions is not in eslintrc format but for flat config } as unknown // languageOptions is not in eslintrc format but for flat config
); );
devDependencies['@typescript-eslint/parser'] = typescriptESLintVersion;
} }
addIgnoresToLintConfig(host, options.projectRoot, [ addIgnoresToLintConfig(host, options.projectRoot, [
@ -74,13 +80,7 @@ export async function addLinting(
]); ]);
} }
const installTask = addDependenciesToPackageJson( const installTask = addDependenciesToPackageJson(host, {}, devDependencies);
host,
{},
{
'@nuxt/eslint-config': nuxtEslintConfigVersion,
}
);
tasks.push(installTask); tasks.push(installTask);
} }
return runTasksInSerial(...tasks); return runTasksInSerial(...tasks);

View File

@ -1,5 +1,6 @@
import { Tree } from 'nx/src/generators/tree'; import { Tree } from 'nx/src/generators/tree';
import { Linter, LinterType, lintProjectGenerator } from '@nx/eslint'; import { Linter, LinterType, lintProjectGenerator } from '@nx/eslint';
import { typescriptESLintVersion } from '@nx/eslint/src/utils/versions';
import { joinPathFragments } from 'nx/src/utils/path'; import { joinPathFragments } from 'nx/src/utils/path';
import { import {
addDependenciesToPackageJson, addDependenciesToPackageJson,
@ -67,11 +68,21 @@ export async function addLinting(
editEslintConfigFiles(host, options.projectRoot); editEslintConfigFiles(host, options.projectRoot);
const devDependencies = {
...extraEslintDependencies.devDependencies,
};
if (
isEslintConfigSupported(host, options.projectRoot) &&
useFlatConfig(host)
) {
devDependencies['@typescript-eslint/parser'] = typescriptESLintVersion;
}
if (!options.skipPackageJson) { if (!options.skipPackageJson) {
const installTask = addDependenciesToPackageJson( const installTask = addDependenciesToPackageJson(
host, host,
extraEslintDependencies.dependencies, extraEslintDependencies.dependencies,
extraEslintDependencies.devDependencies devDependencies
); );
tasks.push(installTask); tasks.push(installTask);
} }