重命名符号引用漏更新,先确认语言服务器状态;javascript依赖typescript语言服务器,需重启ts server、检查右下角状态栏、配置jsconfig.json;提取函数要注意闭包变量和隐式依赖;跨文件重构须配置baseurl与paths,动态导入和commonjs无法被识别。

重命名符号时引用漏更新?先确认语言服务器状态
VSCode 的 rename symbol 功能在 JavaScript 中依赖 TypeScript 语言服务器(即使没用 TS,它也负责 JS 的语义分析)。如果重命名后某些文件没被改,大概率是语言服务没完全加载或卡住了。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入TypeScript: Restart TS Server手动重启 - 检查右下角状态栏:若显示 “TypeScript initializing…” 或 “No config” 就说明
tsconfig.json缺失或路径不对 - 哪怕纯 JS 项目,也建议加一个最小
jsconfig.json:{ "compilerOptions": { "allowJs": true, "checkJs": false, "maxNodeModuleJsDepth": 2 } }
提取函数后参数错乱?注意作用域和隐式依赖
VSCode 的 Extract to Function 在 JS 中不分析运行时行为,只做静态 AST 提取。遇到闭包变量、this 绑定、或动态属性访问时,它可能漏传参或生成错误签名。
- 选中代码前,先手动确认所有外部依赖变量:比如
user.name、API_BASE_URL、localStorage等 - 避免提取含
eval、with、或字符串拼接的 key(如obj[`${prefix}Id`]),这类无法被静态识别 - 提取后立刻检查新函数签名——如果参数为空或只有局部变量,说明有外部依赖没被捕获,得手动补全
ESLint + Prettier 自动修复反把代码搞崩?关掉危险规则
editor.codeActionsOnSave 开启 source.fixAll.eslint 后,某些 ESLint 规则会强制改写逻辑,比如 no-param-reassign 把 obj.id = 1 改成 Object.assign(obj, { id: 1 }),但后者在 Vue 响应式或 Immutable 场景下行为不同。
- 禁用高风险自动修复规则:
no-param-reassign、prefer-const(对 let/const 混用敏感)、eqeqeq(可能把== null强转为=== null) - 只保留安全格式类规则:
semi、quotes、indent,这些不影响运行逻辑 - 在
.eslintrc.cjs中显式关闭自动修复:rules: { 'no-param-reassign': ['error', { props: false }] }
跨文件重构失败?检查模块解析配置
JS 项目里用 @utils/* 别名或 import.meta.url 动态导入时,VSCode 默认不理解路径映射,导致重命名或提取后引用路径失效。
- 必须在
jsconfig.json或tsconfig.json中声明baseUrl和paths,否则别名导入的文件不会被纳入符号分析范围 - 动态 import() 写法(如
import(`./pages/${name}.js`))永远无法被重构识别,这类要靠人工维护 - CommonJS 的
require()调用也不支持自动引用追踪,优先迁移到 ES modules
include 字段里,或者用了非标准构建工具(如 esbuild 自定义 loader),那些文件就彻底脱离重构保护范围。











