导入的git子模块导致Typescript项目中出现运行时链接错误
Typescript项目A导入Typescript项目B,但是我在处理项目A的同时积极修改项目B 项目A和B都有各自的git回购协议。 我已经将项目B作为git子模块添加到项目a中导入的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
/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模块
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';