When I run with the following configuration to migrate from version 8 to version 9 get an error. I want to know where the problem is .
the error:
Oops! Something went wrong! 🙁
ESLint: 9.1.0
Error: Error while loading rule ‘@typescript-eslint/consistent-type-imports’: You have used a rule which requires parserServices to be generated. You must therefore provide a value for the “parserOptions.project” property for @typescript-eslint/parser.
Parser: undefined
Note: detected a parser other than @typescript-eslint/parser. Make sure the parser is configured to forward “parserOptions.project” to @typescript-eslint/parser.
….
I tried adding the following configuration but it doesn’t seem to work
parser: 'vue-eslint-parser',
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
extraFileExtensions: ['.vue'],
<code> {
files: ['*.vue'],
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
extraFileExtensions: ['.vue'],
ecmaVersion: 'latest',
ecmaFeatures: {
jsx: true,
},
},
rules: {
'no-undef': 'off',
},
},
</code>
{
files: ['*.vue'],
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
extraFileExtensions: ['.vue'],
ecmaVersion: 'latest',
ecmaFeatures: {
jsx: true,
},
},
rules: {
'no-undef': 'off',
},
},
the configuration files :
eslint.config.js
<code>import { fileURLToPath } from 'url'
import { FlatCompat } from '@eslint/eslintrc'
import js from '@eslint/js'
import tseslint from 'typescript-eslint';
import markdown from 'eslint-plugin-markdown'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
console.log(path.resolve('.', './tsconfig.json'))
// /Users/xxxx-rd/repo/vue3-works/internal/eslintlib/tsconfig.json
const compat = new FlatCompat({
baseDirectory: __dirname,
resolvePluginsRelativeTo: __dirname,
recommendedConfig: js.configs.recommended,
...markdown.configs.recommended,
ignores: ['dist', '**/*.d.ts'],
plugins: ['@typescript-eslint', 'eslint-plugin-tsdoc', 'unicorn'],
'plugin:import/recommended',
'plugin:eslint-comments/recommended',
'plugin:jsonc/recommended-with-jsonc',
'plugin:vue/recommended',
'plugin:@typescript-eslint/recommended',
extensions: ['.js', 'mjs', '.jsx', '.ts', '.tsx', '.d.ts'],
files: ['*.json', '*.json5', '*.jsonc'],
parser: 'jsonc-eslint-parser',
parser: 'vue-eslint-parser',
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
extraFileExtensions: ['.vue'],
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
'@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }],
'@typescript-eslint/ban-ts-comment': ['off', { 'ts-ignore': false }],
'@typescript-eslint/ban-types': [
'import/no-named-as-default': 'off',
'import/no-named-as-default-member': 'off',
<code>import { fileURLToPath } from 'url'
import path from 'path'
import { FlatCompat } from '@eslint/eslintrc'
import js from '@eslint/js'
import tseslint from 'typescript-eslint';
import markdown from 'eslint-plugin-markdown'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
console.log(path.resolve('.', './tsconfig.json'))
// /Users/xxxx-rd/repo/vue3-works/internal/eslintlib/tsconfig.json
const compat = new FlatCompat({
baseDirectory: __dirname,
resolvePluginsRelativeTo: __dirname,
recommendedConfig: js.configs.recommended,
})
export default [
...markdown.configs.recommended,
{
ignores: ['dist', '**/*.d.ts'],
},
...compat.config({
env: {
node: true,
browser: true,
es2022: true,
},
plugins: ['@typescript-eslint', 'eslint-plugin-tsdoc', 'unicorn'],
extends: [
'eslint:recommended',
'plugin:import/recommended',
'plugin:eslint-comments/recommended',
'plugin:jsonc/recommended-with-jsonc',
'plugin:vue/recommended',
'plugin:@typescript-eslint/recommended',
],
parserOptions: {
ecmaVersion: 'latest',
},
settings: {
'import/resolver': {
node: {
extensions: ['.js', 'mjs', '.jsx', '.ts', '.tsx', '.d.ts'],
},
},
},
overrides: [
{
files: ['*.json', '*.json5', '*.jsonc'],
parser: 'jsonc-eslint-parser',
},
{
files: ['*.vue'],
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
extraFileExtensions: ['.vue'],
ecmaVersion: 'latest',
ecmaFeatures: {
jsx: true,
},
},
rules: {
'no-undef': 'off',
},
},
],
rules: {
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
'@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }],
'@typescript-eslint/ban-ts-comment': ['off', { 'ts-ignore': false }],
'@typescript-eslint/ban-types': [
'error',
{
extendDefaults: true,
types: {
'{}': false,
},
},
],
'import/default': 'off',
'import/no-named-as-default': 'off',
'import/no-named-as-default-member': 'off',
},
}),
]
</code>
import { fileURLToPath } from 'url'
import path from 'path'
import { FlatCompat } from '@eslint/eslintrc'
import js from '@eslint/js'
import tseslint from 'typescript-eslint';
import markdown from 'eslint-plugin-markdown'
const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
console.log(path.resolve('.', './tsconfig.json'))
// /Users/xxxx-rd/repo/vue3-works/internal/eslintlib/tsconfig.json
const compat = new FlatCompat({
baseDirectory: __dirname,
resolvePluginsRelativeTo: __dirname,
recommendedConfig: js.configs.recommended,
})
export default [
...markdown.configs.recommended,
{
ignores: ['dist', '**/*.d.ts'],
},
...compat.config({
env: {
node: true,
browser: true,
es2022: true,
},
plugins: ['@typescript-eslint', 'eslint-plugin-tsdoc', 'unicorn'],
extends: [
'eslint:recommended',
'plugin:import/recommended',
'plugin:eslint-comments/recommended',
'plugin:jsonc/recommended-with-jsonc',
'plugin:vue/recommended',
'plugin:@typescript-eslint/recommended',
],
parserOptions: {
ecmaVersion: 'latest',
},
settings: {
'import/resolver': {
node: {
extensions: ['.js', 'mjs', '.jsx', '.ts', '.tsx', '.d.ts'],
},
},
},
overrides: [
{
files: ['*.json', '*.json5', '*.jsonc'],
parser: 'jsonc-eslint-parser',
},
{
files: ['*.vue'],
parser: 'vue-eslint-parser',
parserOptions: {
parser: '@typescript-eslint/parser',
project: './tsconfig.json',
extraFileExtensions: ['.vue'],
ecmaVersion: 'latest',
ecmaFeatures: {
jsx: true,
},
},
rules: {
'no-undef': 'off',
},
},
],
rules: {
'@typescript-eslint/explicit-module-boundary-types': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-non-null-asserted-optional-chain': 'off',
'@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }],
'@typescript-eslint/ban-ts-comment': ['off', { 'ts-ignore': false }],
'@typescript-eslint/ban-types': [
'error',
{
extendDefaults: true,
types: {
'{}': false,
},
},
],
'import/default': 'off',
'import/no-named-as-default': 'off',
'import/no-named-as-default-member': 'off',
},
}),
]
tsconfig.ts
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
"include": ["src","**/*.config.ts", "**/*.config.js"]
<code>{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"allowJs": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src","**/*.config.ts", "**/*.config.js"]
}
</code>
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "Bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"allowJs": true,
/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src","**/*.config.ts", "**/*.config.js"]
}
package.json
"main": "./dist/umd/index.umd.js",
"module": "./dist/es/index.mjs",
"types": "./dist/types/index.d.ts",
"types": "./dist/types/index.d.ts",
"import": "./dist/es/index.mjs",
"require": "./dist/umd/index.umd.js"
"build": "tsc && vite build",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"@types/node": "^20.12.7",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsonc": "^2.15.1",
"eslint-plugin-markdown": "^5.0.0",
"eslint-plugin-tsdoc": "^0.2.17",
"eslint-plugin-unicorn": "^53.0.0",
"eslint-plugin-vue": "^9.25.0",
"typescript-eslint": "^7.8.0",
"vite-plugin-dts": "^3.9.0",
"vite-plugin-eslint": "^1.8.1"
<code>{
"name": "@eslint9",
"private": false,
"version": "0.0.2",
"type": "module",
"files": [
"dist"
],
"main": "./dist/umd/index.umd.js",
"module": "./dist/es/index.mjs",
"types": "./dist/types/index.d.ts",
"exports": {
"types": "./dist/types/index.d.ts",
"import": "./dist/es/index.mjs",
"require": "./dist/umd/index.umd.js"
},
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint ."
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"vue-tsc": "^2.0.6"
},
"peerDependencies": {
"@eslint/js": "^9.1.1",
"@types/node": "^20.12.7",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"eslint": "^9.1.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsonc": "^2.15.1",
"eslint-plugin-markdown": "^5.0.0",
"eslint-plugin-tsdoc": "^0.2.17",
"eslint-plugin-unicorn": "^53.0.0",
"eslint-plugin-vue": "^9.25.0",
"typescript": "^5.4.5",
"typescript-eslint": "^7.8.0",
"vite": "^5.2.10",
"vite-plugin-dts": "^3.9.0",
"vite-plugin-eslint": "^1.8.1"
}
}
</code>
{
"name": "@eslint9",
"private": false,
"version": "0.0.2",
"type": "module",
"files": [
"dist"
],
"main": "./dist/umd/index.umd.js",
"module": "./dist/es/index.mjs",
"types": "./dist/types/index.d.ts",
"exports": {
"types": "./dist/types/index.d.ts",
"import": "./dist/es/index.mjs",
"require": "./dist/umd/index.umd.js"
},
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint ."
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"vue-tsc": "^2.0.6"
},
"peerDependencies": {
"@eslint/js": "^9.1.1",
"@types/node": "^20.12.7",
"@typescript-eslint/eslint-plugin": "^7.9.0",
"@typescript-eslint/parser": "^7.9.0",
"eslint": "^9.1.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsonc": "^2.15.1",
"eslint-plugin-markdown": "^5.0.0",
"eslint-plugin-tsdoc": "^0.2.17",
"eslint-plugin-unicorn": "^53.0.0",
"eslint-plugin-vue": "^9.25.0",
"typescript": "^5.4.5",
"typescript-eslint": "^7.8.0",
"vite": "^5.2.10",
"vite-plugin-dts": "^3.9.0",
"vite-plugin-eslint": "^1.8.1"
}
}
Thanks in advance .