)
1. Vue3 TypeScript 项目为什么需要 ESLint Prettier 代码格式校验刚拉起一个 Vue3 TypeScript 项目时很多人会先跑通页面再考虑规范。结果两周后回头看script setup langts里混着单引号和双引号缩进有的 2 空格有的 4 空格ref类型标注时有时无git diff里一半是格式变动一半是业务逻辑。这种项目一旦多人协作代码评审基本变成格式争论现场。ESLint 和 Prettier 解决的是两个不同层面的问题。ESLint 管的是代码质量与潜在错误比如未使用的变量、any滥用、Vue 模板里v-for缺key、TypeScript 类型断言不规范。Prettier 管的是纯格式化比如换行位置、引号风格、尾逗号、每行最大长度。两者职责不重叠但规则会打架所以需要eslint-config-prettier把冲突规则关掉再用eslint-plugin-prettier把 Prettier 的格式化结果当成 ESLint 的一条规则来报错。这套组合适合谁适合正在从零搭建 Vue3 TypeScript 工程的前端也适合接手了一个没有规范约束的老项目、想逐步把代码质量拉起来的人。我试过在一个 30 多个组件的后台项目里补这套链路第一轮lint:fix跑完git diff有 2000 多行变动但之后每次提交都干净很多。这里还有一个容易被忽略的点现在很多团队会用 AI 辅助工具生成组件代码、补全类型、写单元测试。这些工具通常需要调用大模型 API如果每个工具单独配一套 Key管理起来很乱。TaoToken 提供统一 Key/API 通道可以把这类 AI 辅助工具的调用凭证收口到一处后面第 2 节会具体说怎么接。先把规范链路搭起来再谈 AI 工具接入顺序不能反。因为如果项目本身没有格式约束AI 生成的代码风格会和你手写的完全不一致合并时冲突更多。2. TaoToken 统一 Key 通道前置准备让 AI 辅助工具共用一套凭证在 Vue3 TypeScript 项目里ESLint 和 Prettier 本身是本地工具不需要联网。但实际开发中你可能会用 AI 辅助工具做这些事根据组件 props 生成 TypeScript 类型、把一段 Options API 改写成script setup、给 ESLint 报错的地方生成修复建议、写 Vitest 测试用例。这些工具如果各自配置 API Key会出现三个问题Key 散落在不同配置文件里、额度无法统一查看、换工具时要重新配一遍。TaoToken 的做法是提供一个统一的 API 通道你只需要在官网注册后拿到一个 Key然后在各个 AI 辅助工具里把 Base URL 指向https://taotoken.net/apiModel ID 按需选择。这样凭证只有一份管理成本低很多。具体操作路径是这样的。先打开官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content完成注册后进入控制台。控制台地址是https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content在里面找到 API Keys 页面路径是https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content创建一个新 Key 并复制保存。这个 Key 就是后面所有 AI 辅助工具共用的凭证。如果你用的是 Claude Code 这类命令行编码工具它的接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有 Base URL、Key、Model ID 三件套的填写说明。Claude Code 的 Anthropic 兼容接入页在https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content按页面提示把环境变量或配置文件里的地址替换掉即可。这里要强调一个原则TaoToken 是统一 Key 通道不是替代你编辑器或 ESLint 的工具。ESLint 该装还是装Prettier 该配还是配TaoToken 只负责让 AI 辅助调用有统一的入口。两者是配合关系不是替代关系。如果你只是想在写代码时随时问模型一些 TypeScript 类型问题可以直接用模型对话页面https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里的对话功能不需要在项目里配任何东西。但如果你要把 AI 能力集成到编码流程里比如让工具自动补全类型那就需要按下面的配置来。长期做编码和 Agent 类任务的可以关注 Coding Plan 页面https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有适合持续编码场景的说明。先把 Key 拿到手下一节开始配 ESLint 和 Prettier。3. 可复制配置.eslintrc.cjs、.prettierrc.cjs 与 settings.json 完整片段这一节是整篇的核心所有配置都可以直接复制到项目根目录。先装依赖命令如下npm install eslint prettier eslint-plugin-vue typescript-eslint/eslint-plugin typescript-eslint/parser eslint-config-prettier eslint-plugin-prettier -D依赖分工要清楚eslint是核心检查器prettier是核心格式化器eslint-plugin-vue提供 Vue3 规则typescript-eslint/parser让 ESLint 能解析 TypeScript 语法typescript-eslint/eslint-plugin提供 TS 规则eslint-config-prettier关闭冲突规则eslint-plugin-prettier把 Prettier 当 ESLint 规则跑。然后是.eslintrc.cjs。Vue3 项目默认 ESM所以 ESLint 配置用.cjs后缀module.exports { root: true, env: { browser: true, es2021: true, node: true }, parser: vue-eslint-parser, parserOptions: { ecmaVersion: latest, parser: typescript-eslint/parser, sourceType: module }, extends: [ plugin:vue/vue3-essential, plugin:typescript-eslint/recommended, plugin:prettier/recommended, eslint-config-prettier ], rules: { no-console: process.env.NODE_ENV production ? warn : off, no-debugger: process.env.NODE_ENV production ? warn : off, typescript-eslint/explicit-function-return-type: off, vue/component-definition-name-casing: off, prettier/prettier: error } }.eslintignore内容node_modules/ dist/ *.config.js *.config.cjs public/ logs/ temp/接着是.prettierrc.cjsmodule.exports { printWidth: 120, tabWidth: 2, useTabs: false, semi: true, singleQuote: true, quoteProps: as-needed, jsxSingleQuote: false, trailingComma: es5, bracketSpacing: true, arrowParens: avoid, rangeStart: 0, rangeEnd: Infinity, embeddedLanguageFormatting: auto, endOfLine: lf, htmlWhitespaceSensitivity: css, vueIndentScriptAndStyle: false }.prettierignore内容.eslintignore node_modules/ dist/ public/package.json的 scripts 部分{ scripts: { lint: eslint . --ext .vue,.js,.ts,.jsx,.tsx, lint:fix: eslint . --ext .vue,.js,.ts,.jsx,.tsx --fix, format: prettier --write \**/*.{vue,js,ts,jsx,tsx,json,css,scss,md}\ } }VSCode 的.vscode/settings.json配置这是保存自动修复的关键{ editor.formatOnSave: true, editor.defaultFormatter: esbenp.prettier-vscode, editor.codeActionsOnSave: { source.fixAll.eslint: explicit }, eslint.validate: [ javascript, typescript, vue ] }如果你在项目里用 AI 辅助工具比如某个支持自定义 Base URL 的编码插件配置片段大致如下以通用 OpenAI 兼容格式为例{ baseUrl: https://taotoken.net/api, apiKey: 你的 TaoToken Key, model: 按需选择 Model ID }注意 Base URL 是https://taotoken.net/api不要加 UTM 参数。Key 从 API Keys 页面获取。Model ID 根据你用的工具和任务类型选择具体可参考接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。配置写完后VSCode 需要装两个插件ESLintDirk Baeumer 提供和 Prettier - Code formatterPrettier 团队提供。装完重启窗口打开一个.vue文件故意写错格式保存时应该能看到自动修复。4. 验证请求与成功结果逐条命令跑通 lint、format 与保存自动修复配置写完不代表生效必须逐条验证。先跑检查命令npm run lint如果项目里有格式问题控制台会列出文件路径、行号、报错规则名。比如你会看到类似这样的输出/src/components/HelloWorld.vue 12:5 error Replace hello with hello prettier/prettier 18:3 error name is assigned a value but never used typescript-eslint/no-unused-vars这说明 ESLint 和 Prettier 都在工作。第一条是 Prettier 格式化规则报的第二条是 TypeScript 规则报的。看到这两类报错说明链路通了。接着跑自动修复npm run lint:fix再跑一次npm run lint如果之前是格式问题现在应该全部消失。如果还有残留通常是typescript-eslint/no-unused-vars这类无法自动修复的规则需要手动改代码。单独跑格式化npm run format这个命令会把src下所有.vue、.ts、.json、.md文件按.prettierrc.cjs的规则重写一遍。跑完后git diff会显示变动确认没有误改业务逻辑后提交。验证 VSCode 保存自动修复打开任意.vue文件故意把单引号改成双引号把缩进改成 4 空格然后按CtrlS。如果配置正确文件会立刻恢复成单引号和 2 空格缩进。如果没有反应检查.vscode/settings.json是否在项目根目录以及 ESLint 插件是否在输出面板报错。验证 AI 辅助工具通道如果你配了某个编码插件指向 TaoToken可以发一个简单请求测试。比如让工具解释一段 TypeScript 类型或者生成一个 Vue3 组件的 props 定义。如果返回正常说明 Base URL、Key、Model ID 三件套填对了。如果报 401说明 Key 有问题如果报 model not found说明 Model ID 写错了。成功结果应该是npm run lint无报错npm run lint:fix能自动修掉格式问题VSCode 保存时自动格式化AI 辅助工具能正常返回内容。这四件事都通过才算真正接入完成。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 报错对照配置过程中最容易卡在几个固定报错上这里逐条对照。401 Unauthorized。这个报错通常出现在 AI 辅助工具调用时。原因有三个Key 复制时多了空格或换行、Key 已过期或被删除、Base URL 写成了带 UTM 的地址。解决方法是重新从 API Keys 页面复制 Key确认 Base URL 是https://taotoken.net/api不要带任何查询参数。如果还不行在控制台重新生成一个 Key 再试。local proxy failed。这个报错一般出现在工具尝试走本地代理但代理没启动时。检查你的工具配置里是否误开了代理选项把代理关掉直接走https://taotoken.net/api。另外确认本机没有设置全局代理环境变量比如HTTP_PROXY或HTTPS_PROXY有的话临时取消再试。reading choices 报错。这个通常出现在 OpenAI 兼容接口返回结构不符合预期时。常见原因是 Model ID 填错了或者工具用的接口版本和通道不匹配。解决方法是核对接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里对应工具的 Model ID 写法确认请求体里的model字段和文档一致。如果工具支持自定义请求路径确认路径是/v1/chat/completions这类标准格式。OAuth 相关报错。如果你用的是 Claude Code 这类工具它可能默认走 OAuth 登录流程。接入 TaoToken 时需要改成 API Key 模式具体做法参考https://taotoken.net/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content页面的说明把认证方式从 OAuth 切换成 Key。切换后重启工具再发请求测试。ESLint 报错但 Prettier 不生效。检查.eslintrc.cjs的extends数组里plugin:prettier/recommended是否在eslint-config-prettier之前。顺序错了会导致冲突规则没被正确关闭。另外确认prettier/prettier规则是error级别不是off。VSCode 保存不自动修复。先确认.vscode/settings.json在项目根目录不是用户全局设置。然后检查editor.codeActionsOnSave里的source.fixAll.eslint值是否为explicit旧版本可能是true。最后看 ESLint 插件输出面板有没有报配置解析错误有的话按提示修.eslintrc.cjs。CC Switch / Cline MCP / Codex auth.json 三件套。如果你用这些工具配置时务必写全 Base URL、Key、Model ID。Base URL 统一是https://taotoken.net/apiKey 从 API Keys 页面拿Model ID 按工具文档填。三者缺一不可少一个就会报连接失败或认证失败。排查顺序建议先确认本地 ESLint/Prettier 命令能跑通再确认 VSCode 保存能自动修复最后才排查 AI 辅助工具的通道问题。本地规范链路和远程 API 通道是两件独立的事分开排查效率更高。6. 语义一致 CTA把规范链路和统一 Key 通道落到日常开发规范链路搭好后日常开发动作会变成这样写组件时 VSCode 实时标红保存时自动格式化提交前跑一次npm run lint确认没有残留问题。如果项目用 husky lint-staged还可以把lint:fix挂到 pre-commit 钩子上提交时自动修一遍暂存区文件。AI 辅助工具接入 TaoToken 后凭证管理也收口了。你不需要在每个工具里单独配 Key只需要在需要的地方填 Base URLhttps://taotoken.net/api、从 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content拿的 Key、以及对应工具的 Model ID。三件套填对工具就能正常调用。如果你只是偶尔问模型一些 TypeScript 类型问题直接用模型对话页面https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content就行不用在项目里配任何东西。如果你要把 AI 能力集成到编码流程里比如让工具自动补全类型或生成测试那就按第 3 节的配置片段来。长期做编码和 Agent 类任务的可以看 Coding Plan 页面https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content里面有适合持续编码场景的说明。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content遇到配置问题先翻文档大部分报错都有对应说明。最后给一个实用建议把.eslintrc.cjs、.prettierrc.cjs、.vscode/settings.json这三个文件提交到 Git 仓库团队成员拉下来就能用同一套规范。AI 辅助工具的 Key 不要提交到仓库用环境变量或本地配置文件管理。规范链路是团队共享的Key 是个人凭证两者分开处理。