Vite.js 上带有 Eslint 的 Vue 3 — 无法解析模块 eslint(import/no-unresolved) 的路径
Vue 3 on Vite.js with Eslint — Unable to resolve path to module eslint(import/no-unresolved)
我在 Vite.js 上使用带有 Eslint + Airbnb 配置的 Vue 3。 Airbnb config 有一个规则eslint(import/no-unresolved)
,这很好,但是Eslint 不知道如何解析别名路径
我想为路径使用别名——例如:
import TableComponent from '@/components/table/TableComponent.vue'˙
环境一般JavaScript。
我设法设置了我的 vite.config.js
,以便应用程序可以像这样解析路径:
import path from 'path';
import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: [{
find: "@", replacement: path.resolve(__dirname, 'src')
},],
},
});
Vue app 是这样工作的,正确解析了导入路径,但是 Eslint 一直报错:Unable to resolve path to module eslint(import/no-unresolved)
如何以及在哪里可以告诉 Eslint 如何解析别名?
我试过:
install eslint-plugin-import eslint-import-resolver-alias --save-dev
// .eslintrc.js
// ...
extends: [
'eslint:recommended',
'plugin:import/recommended',
'airbnb-base',
'plugin:vue/vue3-strongly-recommended',
],
settings: {
'import/resolver': {
alias: {
map: [
['@', 'src'],
],
},
},
},
但这不起作用。
编辑:
解决了这个问题,如果你像我一样使用普通 JavaScript,请查看已接受的答案。
如果您使用的是 TypeScript,看看 是否可以帮助您。
万一有人遇到这个问题,这对我来说是有效的*:
settings: {
'import/resolver': {
alias: {
map: [
['@', './src'],
],
},
},
},
*在我的例子中,Vue 的根目录是 'src' 目录,而 Eslint 的根目录高一级,因此它需要 './src' 路径。
非常感谢@https://github.com/aladdin-add 对 github 问题的回答!
我遇到了同样的问题,即使我修复了 src 路径,问题仍然存在。在我添加扩展之前它不起作用:
"settings": {
"import/resolver": {
"alias": {
"map": [
["@", "./src"]
],
"extensions": [".js",".jsx"] <--- HERE
}
}
},
1.在 vite.config.js
中使用和导出别名
// vite.config.js
import { resolve } from 'path';
import { defineConfig } from 'vite';
export const aliases = {
'@': resolve(__dirname, './src'),
'@u': resolve(__dirname, './src/utils'),
};
export default () => defineConfig({
// ...
resolve: {
alias: aliases,
},
})
2。创建支持 ES 模块的 .eslintrc。(感谢 )
2.1 npm i esm -D
2.2 创建 .eslintrc.js
的同级 — .eslintrc.esm.js
.
2.3 将您的 ESLint 配置放入 .eslintrc.esm.js
.
// .eslintrc.esm.js
export default {
root: true,
extends: ['@vue/airbnb', 'plugin:vue/recommended'],
// ...
}
2.4 内部 .eslintrc.js
包含此代码:
const _require = require('esm')(module)
module.exports = _require('./.eslintrc.esm.js').default
3。在 .eslintrc.esm.js
中导入、映射和使用来自 vite.config.js
的别名
3.1 npm i eslint-import-resolver-alias -D
3.2里面.eslintrc.esm.js
包括以下代码:
// .eslintrc.esm.js
import { aliases } from './vite.config';
const mappedAliases = Object.entries(aliases).map((entry) => entry); // [[alias, path], [alias, path], ...]
export default {
// ...
settings: {
'import/resolver': {
alias: {
map: mappedAliases,
},
},
},
}
在 .eslintrc.js 添加
settings: {
'import/resolver': {
alias: {
map: [['@', './src/']],
extensions: ['.js', '.vue'],
},
},
},
这解决了我的 TypeScript
项目中的问题。
npm install eslint-import-resolver-typescript
eslint-import-resolver-typescript
安装后
{
// other configuration are omitted for brevity
settings: {
"import/resolver": {
typescript: {} // this loads <rootdir>/tsconfig.json to eslint
},
},
}
应添加到 .eslintrc.js.
我的tsconfig.json(删除不需要的设置)
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"strict": false,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["esnext", "dom"],
"types": ["vite/client", "node"],
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
},
"allowJs": true
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"exclude": ["node_modules"]
}
查看讨论here:
我在 Vite.js 上使用带有 Eslint + Airbnb 配置的 Vue 3。 Airbnb config 有一个规则eslint(import/no-unresolved)
,这很好,但是Eslint 不知道如何解析别名路径
我想为路径使用别名——例如:
import TableComponent from '@/components/table/TableComponent.vue'˙
环境一般JavaScript。
我设法设置了我的 vite.config.js
,以便应用程序可以像这样解析路径:
import path from 'path';
import { defineConfig } from 'vite';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
resolve: {
alias: [{
find: "@", replacement: path.resolve(__dirname, 'src')
},],
},
});
Vue app 是这样工作的,正确解析了导入路径,但是 Eslint 一直报错:Unable to resolve path to module eslint(import/no-unresolved)
如何以及在哪里可以告诉 Eslint 如何解析别名?
我试过:
install eslint-plugin-import eslint-import-resolver-alias --save-dev
// .eslintrc.js
// ...
extends: [
'eslint:recommended',
'plugin:import/recommended',
'airbnb-base',
'plugin:vue/vue3-strongly-recommended',
],
settings: {
'import/resolver': {
alias: {
map: [
['@', 'src'],
],
},
},
},
但这不起作用。
编辑:
解决了这个问题,如果你像我一样使用普通 JavaScript,请查看已接受的答案。
如果您使用的是 TypeScript,看看
万一有人遇到这个问题,这对我来说是有效的*:
settings: {
'import/resolver': {
alias: {
map: [
['@', './src'],
],
},
},
},
*在我的例子中,Vue 的根目录是 'src' 目录,而 Eslint 的根目录高一级,因此它需要 './src' 路径。
非常感谢@https://github.com/aladdin-add 对 github 问题的回答!
我遇到了同样的问题,即使我修复了 src 路径,问题仍然存在。在我添加扩展之前它不起作用:
"settings": {
"import/resolver": {
"alias": {
"map": [
["@", "./src"]
],
"extensions": [".js",".jsx"] <--- HERE
}
}
},
1.在 vite.config.js
中使用和导出别名// vite.config.js
import { resolve } from 'path';
import { defineConfig } from 'vite';
export const aliases = {
'@': resolve(__dirname, './src'),
'@u': resolve(__dirname, './src/utils'),
};
export default () => defineConfig({
// ...
resolve: {
alias: aliases,
},
})
2。创建支持 ES 模块的 .eslintrc。(感谢
2.1 npm i esm -D
2.2 创建 .eslintrc.js
的同级 — .eslintrc.esm.js
.
2.3 将您的 ESLint 配置放入 .eslintrc.esm.js
.
// .eslintrc.esm.js
export default {
root: true,
extends: ['@vue/airbnb', 'plugin:vue/recommended'],
// ...
}
2.4 内部 .eslintrc.js
包含此代码:
const _require = require('esm')(module)
module.exports = _require('./.eslintrc.esm.js').default
3。在 .eslintrc.esm.js
vite.config.js
的别名
3.1 npm i eslint-import-resolver-alias -D
3.2里面.eslintrc.esm.js
包括以下代码:
// .eslintrc.esm.js
import { aliases } from './vite.config';
const mappedAliases = Object.entries(aliases).map((entry) => entry); // [[alias, path], [alias, path], ...]
export default {
// ...
settings: {
'import/resolver': {
alias: {
map: mappedAliases,
},
},
},
}
在 .eslintrc.js 添加
settings: {
'import/resolver': {
alias: {
map: [['@', './src/']],
extensions: ['.js', '.vue'],
},
},
},
这解决了我的 TypeScript
项目中的问题。
npm install eslint-import-resolver-typescript
eslint-import-resolver-typescript
安装后
{
// other configuration are omitted for brevity
settings: {
"import/resolver": {
typescript: {} // this loads <rootdir>/tsconfig.json to eslint
},
},
}
应添加到 .eslintrc.js.
我的tsconfig.json(删除不需要的设置)
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"strict": false,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["esnext", "dom"],
"types": ["vite/client", "node"],
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
},
"allowJs": true
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
"exclude": ["node_modules"]
}
查看讨论here: