导入的git子模块导致Typescript项目中出现运行时链接错误

导入的git子模块导致Typescript项目中出现运行时链接错误,typescript,import,node-modules,git-submodules,Typescript,Import,Node Modules,Git Submodules,Typescript项目A导入Typescript项目B,但是我在处理项目A的同时积极修改项目B 项目A和B都有各自的git回购协议。 我已经将项目B作为git子模块添加到项目a中 /project-a/ /src/ /index.ts /build/ /index.js /test/ /node_modules/ /project-b/ <- git submodule /src /buil

Typescript项目A导入Typescript项目B,但是我在处理项目A的同时积极修改项目B

项目A和B都有各自的git回购协议。 我已经将项目B作为git子模块添加到项目a中

/project-a/
    /src/
       /index.ts
    /build/
       /index.js
    /test/
    /node_modules/
    /project-b/  <- git submodule
       /src
       /build/
       /node_modules
我可以独立构建项目B,也可以使用tsconfig.json中包含的项目B构建项目A,但是在运行时节点无法从项目B的node_modules目录中找到模块

我曾经尝试过在项目A和项目B都是工作区的情况下使用Thread工作区,但是这样做会导致项目A无法再构建,因为项目B产生了一系列以前不存在的构建错误

正确的设置方法是什么

更新:
一个例子是project-b依赖于“winston”记录器npm模块纱线安装将winston软件包下载到
project-b/node_模块
。然后,我在
project-a
文件夹中运行构建,项目成功构建,没有错误。如果我在
project-a
文件夹中运行
node build/index.js
,它会说“winston”模块无法加载。作为一个黑客补丁,我将此依赖项添加到
project-a
,修复了运行时错误,但我不希望将
project-b
的所有依赖项添加到
project-a
。我认为问题在于,如果这是一个javascript项目,它会找到
project-b/node\u modules
目录,但因为在typescript中,javascript位于
build/
文件夹树中没有
project-b/node\u modules
文件夹。

注释中提供了答案:


当您使用tsc-b时,项目参考为您提供了这样一个“预构建步骤”。。从“../project-b/build/src/some/folder”导入X应该可以工作,因为TypeScript在project-b上运行时将在project-b/build/src/some/folder中创建.d.ts文件。在IDE中解决导入之前,必须先构建一个已知的限制Matt McCutchen 14小时前


尝试从项目B的节点模块加载模块但失败的文件的路径是什么?正常情况下,这应该是可行的。@MattMcCutchen我在文章中添加了一个更新,试图提供一个问题出现的示例。您的项目A构建是否将项目B的源代码传输到项目A的
构建
目录中?如果是这样,那肯定会导致问题。考虑使用,以便项目B将转换到它自己的输出目录中。然后,您可能需要修改编译器选项和/或package.json文件,以便导入路径同时适用于源和输出。@MattMcCutchen是的,此时项目A正在将A和B构建到A的构建目录中。我想让他们都独立。具有构建依赖项项目的预构建步骤是正常行为吗?在这种情况下,项目A应该使用
从../project-b/some/文件夹导入X
从../project-b/build/src/some/文件夹导入X
,然后依赖源映射。我仍然希望能够导入typescript文件,而不是javascript编译的源代码,以便所有typescript声明都完好无损。当您使用
tsc-b时,项目引用为您提供了这样一个“预构建步骤”。
从“../project-b/build/src/some/folder”导入X应该可以工作,因为TypeScript在
project-b/build/src/some/folder
上运行时将在
project-b
中创建
.d.ts
文件。在IDE中解析该导入之前,必须先构建一个。
import { classB } from '../project-b/src/classB';