问题描述:
使用 TypeScript 3.8.0-dev.20191031 版本时,项目构建失败,报错信息为 "project references" paths outfile "has not been built from source file"。代码中标记了四个导入,每个导入都成功解析。这个问题只在使用编译器指令时出现,使用默认设置的编译不会出现问题。查看相关仓库中的重现仓库,可以看到与此相同的项目,只是设置有所不同。
解决方案:
可以尝试将 TypeScript 配置文件(tsconfig-base.json)中的 "moduleResolution" 选项设置为 "node",而不是 "classic"。修改后的配置文件如下:
{
"compilerOptions": {
// ...其他配置项
"moduleResolution": "node"
}
}
然后重新构建项目,看是否能解决问题。
模块名称 '@Animals' 已成功解析为 '/src/animals/index.ts'。
5条答案
按热度按时间xt0899hw1#
我认为在模块"../animals"或"@animals/dog"上报告错误是正确的,因为这些模块在程序中不存在。(由于程序包含了捆绑的d.ts文件,它只包含
animals/animal
等模块的定义。然而,错误信息具有误导性,可以进行更好的错误处理。让@RyanCavanaugh确认是否希望在这里进行错误报告。
sbdsn5lh2#
你好,你有时间研究一下吗?如果我们能得到关于这个问题是否会解决或者推荐的处理方法的信息,那就太好了。这阻碍了我们完成向项目引用的过渡。
中等规模的项目,我们和第三方都使用的库集合。之前主要是单体代码库。现在正在使用项目引用将其拆分为独立的模块/库。
我们的期望是构建应该为每个项目生成单个文件。每个这样的文件(如果你愿意,可以是库)应该重新导出其公共成员(参见
animals/index.ts
),以便它们可以通过其主模块名称从库中导入。因此,消费者可以使用
import { Dog } from 'animals';
而不必关心库的内部情况。我还没有找到一种方法来实现这一点,因为在这个配置中只有“完整模块路径”导入(
import { Dog } from 'animals/dog';
)才能工作。这在
outDir
设置下运行良好。它不应该与outFile
一起工作吗?如果是这样的话,官方推荐的方法是什么?非常感谢你的时间。
50few1ms3#
你好,请问你能否查看这个问题,并告诉我们TypeScript是否会支持它?目前只需要一个结论就可以了。
除了别名之外,我们希望至少barrel imports(
import { Dog as Dog2 } from 'animals';
)能够正常工作。请告知我们,以便我们可以继续进行项目。谢谢。
wnavrhmk4#
看起来不仅仅是误导性的错误信息,而且"project references"在AMD模块中不起作用。
我遇到了与AMD模块中的三斜线指令相同的问题。
https://github.com/hcapp01/project-references-demo
tsc -b
animals/dog.ts:2:22 - error TS6305: 输出文件'/Users/hcapp01/code/project-references-demo/lib/core.d.ts'没有从源文件'/Users/hcapp01/code/project-references-demo/core/utilities.ts'构建。
2 ///
polhcujo5#
看起来故意禁用了outFile。也许暴露useSourceOfProjectReferenceRedirect作为编译器选项可以解决这个问题。