TypeScript无法检测到符号链接目录正在重新创建,

i86rm4rw  于 6个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(74)

当所有扩展都被禁用时,是否会出现这个问题?:是的

  • VS Code 版本:1.80.2
  • OS 版本:macOS 13.4.1

重现步骤:

  1. 运行以下命令:
mkdir -p scratch/src
mkdir scratch2
dst=$(cd scratch2 && pwd)
ln -s $dst scratch/src/symlink
echo "import { Foo } from './symlink/index'" >scratch/src/test.ts
echo "export const Foo = 1;" >scratch2/index.ts
code --disable-extensions scratch

打开 test.ts。它应该没有错误。

  1. 运行 rm -rf scratch2。在 vscode 检测到更改后,它应该在 ./symlink/index 下方显示一个红色波浪线,并显示错误 "Cannot find module ..."。
  2. 运行 mkdir scratch2 && echo "export const Foo = 1;" >scratch2/index.ts
    此时预期的行为是,vscode 识别到符号链接的目标目录再次存在,并删除红色波浪线。
    实际行为是,波浪线没有消失。您必须关闭并重新打开项目,才能让 vscode 识别代码有效。
yuvru6vn

yuvru6vn1#

这同样适用于符号链接文件:你可以将步骤2替换为rm scratch2/index.ts,并在步骤3中重新创建该文件后观察相同的实际行为。
在步骤3之后,用波浪线点击文本会打开一个选项卡,显示以下内容:

然而,你仍然可以从资源管理器成功打开src/symlink/index.ts

dzhpxtsq

dzhpxtsq2#

我们的文件监视器不支持符号链接后面的工作区中目标的更改。换句话说,出于性能原因,文件监视器不会自动跟踪符号链接。你可以通过查看即使被删除也不会从树中移除符号链接的文件资源管理器来判断这一点。
我们通过files.watcherInclude设置有限地支持添加要监视的额外文件夹,但在这个场景下,当我测试时,我没有看到文件夹重新创建时的文件事件。
然而,我认为TypeScript在这里正在做一些他们自己的事情,因为他们确实检测到了删除操作,但没有检测到重构操作,所以这可能是TypeScript专门处理的事情。

v2g6jxz6

v2g6jxz63#

是的,我同意这是一个TypeScript问题——我在另一个编辑器(IntelliJ IDEA)中也能复现相同的问题。你是否有能力将这个问题转交给microsoft/typescript仓库?

mwngjboj

mwngjboj4#

我们大致上在手表方面有类似的权衡。你可以在不同的手表策略之间切换,并找到最适合你的场景的那一个。

vvppvyoh

vvppvyoh5#

就我所知,这些选项中没有一个能让这个场景按预期运行。

相关问题