必须备份User目录(含settings.json、keybindings.json、snippets/、extensions/)、项目根目录下.vscode/(含launch.json、tasks.json)、.prettierrc、.eslintrc.js等配置文件,以及.ssh/凭据;Settings Sync仅同步扩展ID和基础设置,无法保证Node工具链可用。

只备份 settings.json 无法还原 Node 开发环境,缺了 ESLint/Prettier 配置、调试 launch.json、终端默认 Shell 设置、甚至 node 路径指向,新建项目照样报错。
哪些文件和目录必须一起备份
Node 开发环境依赖的不只是 VSCode 设置,还包括项目级和用户级配置联动。只拷 settings.json 是最常见也最致命的遗漏点。
-
%APPDATA%\Code\User\(Windows)或~/.config/Code/User/(Linux/macOS):必须完整备份,含settings.json、keybindings.json、snippets/和extensions/子目录(尤其含原生模块的扩展如ms-python.python或dbaeumer.vscode-eslint) -
.vscode/目录(项目根目录下):包含launch.json(Node 调试配置)、tasks.json(构建脚本)、extensions.json(推荐插件),这些不会被 Settings Sync 同步,必须手动提交到 Git 或单独备份 -
.prettierrc、.eslintrc.js、jsconfig.json等项目根目录下的配置文件:VSCode 读取它们驱动格式化和校验,但它们不属于 VSCode 自身配置,不参与任何同步机制 -
%USERPROFILE%\.ssh\(Windows)或~/.ssh/(macOS/Linux):若用 Remote-SSH 连远程 Node 服务或 CI 机器,config和known_hosts必须保留,否则连接失败且报REMOTE HOST IDENTIFICATION HAS CHANGED
Settings Sync 为什么对 Node 环境“半失效”
它能同步你装了哪些扩展,但不能保证这些扩展在新环境里真正可用——尤其是 Node 相关工具链高度依赖本地状态。
- 扩展仅同步 ID 列表,不传二进制缓存:
esbenp.prettier-vscode装上后仍需重新下载 Prettier CLI;ms-vscode.vscode-typescript-next可能因 Node 版本不匹配而禁用 -
settings.json中的路径类配置会被过滤:比如typescript.preferences.importModuleSpecifier或terminal.integrated.env.linux在 Windows 上直接被忽略,node.debugging.port若设为绝对路径也会失效 - 调试器依赖本地 Node 版本:
launch.json里的runtimeExecutable指向C:\Program Files\nodejs\node.exe,换电脑后路径大概率不存在,必须手动改或留空让 VSCode 自动探测 - AI 插件(如 GitHub Copilot、Tabnine)登录态不同步:即使扩展列表恢复了,仍需重新授权,否则代码补全不工作
恢复时最容易卡住的三个环节
备份做完只是开始,恢复过程稍有顺序错乱,Node 调试就起不来、ESLint 就不报错、终端就找不到 npx。
- 别先启动 VSCode:覆盖
%APPDATA%\Code\User\前必须确保 VSCode 已完全退出,否则 Windows 会锁住extensions/文件夹,导致部分插件无法写入或激活失败 - Remote-SSH 连接前先清理
known_hosts:如果恢复后点击左下角 Remote Explorer 报错,不要反复重连,直接删掉.ssh\known_hosts里对应服务器那一行,或运行Remote-SSH: Kill VS Code Server on Host命令清空远程服务端缓存 - 检查
launch.json的env字段:若设了NODE_OPTIONS=--inspect或自定义PATH,确认新机器上对应路径存在,否则断点永远不命中;建议优先使用相对路径或环境变量(如${env:HOME})
真正完整的 Node 开发环境备份,是用户配置 + 项目配置 + SSH 凭据 + 扩展缓存四者缺一不可。其中 .vscode/ 和 .prettierrc 这类项目级文件,必须靠 Git 管理,而不是指望 VSCode 同步功能——它根本不知道你在写什么框架、用什么包管理器、跑在哪种 Node 版本上。


















