yarn zero-installs 在 vscode 中触发 cannot find module 报错,根本原因是 typescript 默认只扫描 node_modules 下的类型文件,而 zero-installs 将依赖存于 .yarn/cache 和 .yarn/unplugged 中,vscode 语言服务无法自动识别该路径映射;需启用 yarn sdk(通过 yarn dlx @yarnpkg/sdks typescript 生成并重启 vscode 全进程)、配置 typescript.tsdk 指向 .yarn/sdks/typescript/lib、安装 typescript-pnp-webpack-plugin 插件,并设置 eslint.packagemanager 和 prettier.packagemanager 为 yarn。

Yarn Zero-Installs 在 VSCode 中触发 Cannot find module 高亮报错
VSCode 的 JavaScript/TypeScript 语言服务(js-debug 或 TS Server)默认不识别 Yarn Zero-Installs 的依赖路径,导致编辑器内 import 语句下方出现红色波浪线、跳转失效、自动补全缺失——这不是运行时错误,而是类型检查和符号解析失败。
根本原因是:Zero-Installs 把 node_modules 放在项目根目录外的 .yarn/cache 和 .yarn/unplugged 中,而 TypeScript 默认只扫描项目内 node_modules 下的声明文件(.d.ts)。VSCode 不会主动读取 .pnp.cjs 或 .yarn/sdks 的路径映射。
- 确认是否启用 Zero-Installs:检查项目根目录是否存在
.yarn/install-state.gz或.yarn/sdks目录 - 不要手动创建空
node_modules:这会干扰 PnP 解析,反而让 TS Server 更混乱 - 必须启用 Yarn SDK:在 VSCode 设置中搜索
typescript.preferences.enablePromptUseWorkspaceTsdk,设为true;首次打开项目时会提示“Use Workspace Typescript Version”,点“Allow”
yarn dlx @yarnpkg/sdks typescript 生成的 SDK 不生效
执行该命令后,VSCode 仍用全局或内置 TS 版本,说明 SDK 路径未被识别。常见原因不是命令失败,而是 VSCode 没加载新配置。
关键动作是:关闭所有 VSCode 窗口(包括后台进程),再重新打开项目根目录。仅 reload window 不够——因为集成终端和语言服务器启动时已固化了 PATH 和 TS_NODE_PATH 环境变量。
- 验证 SDK 是否生成:
.yarn/sdks/typescript/lib/tsserver.js文件必须存在且可读 - 检查 VSCode 终端里
which tsc输出:应指向.yarn/sdks/typescript/bin/tsc,否则说明 shell 启动时没 source.yarnrc.yml的enableScripts: true - macOS 用户注意:
terminal.integrated.shellArgs.osx必须设为["-i"],否则 zsh 不加载.yarnrc.yml注入的环境变量
IntelliSense 显示 any 类型而非具体接口
即使跳转和补全恢复,hover 提示仍显示 any,说明类型定义未正确加载。Yarn PnP 下,很多包(如 lodash、react)的类型声明分散在 .yarn/unplugged 子目录中,TS Server 需显式告知这些路径。
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
解决方案是添加 yarn pnpify --sdk 生成的 tsconfig.json 补丁,或手动在项目 tsconfig.json 中追加:
{
"compilerOptions": {
"plugins": [
{
"name": "typescript-pnp-webpack-plugin"
}
]
}
}
- 不要直接改
"typeRoots":PnP 包的类型路径动态生成,硬编码会失效 - 确保
typescript-pnp-webpack-plugin已安装:yarn add -D typescript-pnp-webpack-plugin - VSCode 右下角状态栏应显示 “TypeScript 5.4.5 (Workspace)” 而非 “(Bundled)”
保存时自动修复(Format on Save)失效或报 ESLint: Cannot find module 'eslint'
Zero-Installs 下,ESLint、Prettier 等工具不再通过 node_modules/.bin 启动,而是由 Yarn 运行时注入。VSCode 的格式化扩展(如 ESLint extension)若仍按传统方式查找 CLI,就会报模块找不到。
必须切换为 Yarn-aware 配置:
- 在
.vscode/settings.json中设置:"eslint.packageManager": "yarn" - 禁用旧版 ESLint 扩展,改用官方推荐的
dbaeumer.vscode-eslintv2.4.0+(支持 PnP) - Prettier 同理:
"prettier.packageManager": "yarn",且确保prettier是 workspace devDependency - 如果用 Husky + lint-staged,确认
.husky/pre-commit中调用的是yarn eslint而非./node_modules/.bin/eslint
零安装模式下最易被忽略的,是编辑器语言服务与包管理器运行时的视角割裂——VSCode 看的是文件系统路径,Yarn 看的是虚拟解析图。所有配置都得桥接这两层,而不是单方面“修一个地方”。










