能否在typescript/vscode中使用yarn-pnp?

34

yarn-pnp很棒-不再需要node_modules! 但是没有node_modules,typescript/vscode无法正确解析模块。

有没有方法可以使它正常工作? 谢谢!


我不知道有没有办法,但正在讨论中,请参见 https://github.com/Microsoft/TypeScript/issues/28289。 - artem
谢谢,@artem - 我会关注那个帖子的。 - Eric
2个回答

68

是的!

在 Yarn 2+ 中,Typescript cli 可以开箱即用,所以您只需添加包:
yarn add -D typescript

并运行编译:
yarn tsc

还可以让 VS Code 与 PnP 模块一起使用!您可以使用 `@yarnpkg/sdks` 包(它是 Yarn 2+ 的一部分)

您可以通过以下方式在 VS Code 中启用 PnP 支持:
yarn dlx @yarnpkg/sdks vscode
这将生成 tssdk 并修改您的 .vscode/settings.json,以将 TypeScript 编译器包装器添加到 tssdk 中作为工作区 TypeScript 编译器。您应该运行 VS Code,打开任何 TypeScript 文件,并在窗口右下角单击 TypeScript 版本。从下拉菜单中选择“使用工作区版本”以实际使用 Workspace 编译器,其版本具有后缀 -sdk

您可能还想安装 VS Code zip 文件支持扩展程序: https://marketplace.visualstudio.com/items?itemName=arcanis.vscode-zipfs 以便能够打开项目依赖项的源代码,因为 Yarn 2 将所有依赖项存储在 zip 文件中

您还可以在此处阅读官方 Yarn 2+ 编辑器集成文档:
https://next.yarnpkg.com/getting-started/editor-sdks


嗯...在我看来,它忽略了@latest,只安装稳定版本。 - Dzintars
新手问题:每次添加、升级或删除依赖项时,我们是否都需要运行 yarn pnpify --sdk 呢?如果是的话,这是 yarn v2 的一个重大缺点。 - Paul Razvan Berg
只有在添加新的依赖项,如 typescripteslint 等时,才需要运行 yarn pnpify --sdk。该工具会获取当前已安装的依赖项并为其生成包装器,它需要知道您使用了哪些需要包装器的软件包。当您删除或升级其中一个依赖项时,就不需要运行 yarn pnpify --sdk 了。但是,当您升级 typescript 时,仍然可能希望这样做,以便 VS Code 在状态栏中显示正确的版本:x.y.z-pnpify,否则它将显示旧版本,但一切仍将正常工作。 - Viktor Vlasenko
嗨,但在我的情况下,我找不到所谓的“使用工作区版本”,因为它只提供一个选择,即“使用VS Code的版本(4.3.2)”,而我的yarn add(ed) ts是v4.1.6。[编辑]:根据@Renfrew的答案,我的问题得到了解决。 - yaputra jordi
终于!我遇到了这个问题,一整天都在搜索,现在我发现这不是 TypeScript 的错误,而是 Yarn + VS Code 的问题!非常感谢您提供的简单解决方案! - undevable
显示剩余2条评论

5

添加到@Viktor Vlasenko:

当我有一个工作区并在其中创建一个TypeScript项目时,新项目中的 settings.json 文件中的规则 typescript.tsdktypescript.enablePromptUseWorkspaceTsdk 可能无法正常工作。在这种情况下,当选择TypeScript版本时,您将无法找到x.x.x-pnpify

VS Code 报告说:此设置无法应用于此工作区。直接打开包含的工作区文件夹时将应用它。

因此,在执行步骤yarn dlx @yarnpkg/pnpify --sdk vscode之后,请确保这些新规则在settings.json中得到应用。您可能需要打开一个新窗口并直接打开该文件夹。

VS Code 版本:1.53.2

yarn 版本:2.4.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接