Appearance
安装插件: ESLint
安装插件:Prettier - Code formatter
安装 NPM 包
sh
npm i @eslint/js eslint eslint-config-prettier eslint-plugin-prettier eslint-plugin-vue fs-extra globals prettier typescript-eslint prettier-plugin-tailwindcss -D.prettierrc
{
"semi": false,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"arrowParens": "avoid",
"plugins": ["prettier-plugin-tailwindcss"]
}eslint.config.js
js
import js from '@eslint/js'
import globals from 'globals'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'
import pluginPrettier from 'eslint-plugin-prettier'
import { defineConfig } from 'eslint/config'
export default defineConfig([
{
files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
plugins: { js, prettier: pluginPrettier },
extends: ['js/recommended', 'plugin:prettier/recommended'],
rules: {
// 不再需要注释掉的配置,这些配置将在 .prettierrc 中配置
// 必须加分号,改为 "never" 表示不加分号
// semi: ['error', 'never'],
// 必须用双引号,改为 "double" 表示双引号
// quotes: ['error', 'single'],
// 2 空格缩进
// indent: ['error', 2],
// 允许箭头函数只有一个参数时省略括号
// 'arrow-parens': ['error', 'as-needed'],
// 允许最后一个属性后不加逗号
// 'comma-dangle': ['error', 'never'],
// 禁止未使用变量
'no-unused-vars': ['warn'],
// 启用 prettier 作为 eslint 规则
'prettier/prettier': 'error'
}
},
{
files: ['**/*.{js,mjs,cjs,ts,mts,cts,vue}'],
languageOptions: { globals: globals.browser }
},
tseslint.configs.recommended,
pluginVue.configs['flat/essential'],
{
files: ['**/*.vue'],
rules: {
// 允许组件名不是多单词(多单词是为了避免和 HTML 标签冲突)
'vue/multi-word-component-names': 'off',
// 允许声明为 any 类型
'@typescript-eslint/no-explicit-any': 'off'
},
languageOptions: {
parserOptions: {
parser: tseslint.parser
}
}
}
]).vscode 目录下的 setting.json
json
{
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit"
}
}tsconfig.json
json
{
"files": [],
"references": [
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
],
// 让 vscode 识别 @
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
}
}tsconfig.app.json
json
{
"extends": "@vue/tsconfig/tsconfig.dom.json",
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
/* Linting */
"strict": false,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
"baseUrl": ".",
"paths": { "@/*": ["src/*"] }
},
"include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"]
}tsconfig.node.json
json
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "ES2022",
"lib": ["ES2023"],
"module": "ESNext",
"skipLibCheck": true,
/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
/* Linting */
"strict": false,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true,
},
"include": ["vite.config.ts"]
}vite.config.js
js
import { resolve } from 'path'
import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite'
import { defineConfig } from 'vite'
import { quasar, transformAssetUrls } from '@quasar/vite-plugin'
// https://vite.dev/config/
export default defineConfig({
base: './',
plugins: [vue(), quasar(), tailwindcss()],
resolve: {
alias: {
'@': resolve(__dirname, 'src')
}
}
})