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

时间:2018-08-15 18:39:07

标签: typescript import node-modules git-submodules

打字稿项目A导入了打字稿项目B,但是我在从事项目A的同时正在积极修改项目B。

项目A和B各自都有自己的git repo。 我已经将Project B作为git子模块添加到Project A

/project-a/
    /src/
       /index.ts
    /build/
       /index.js
    /test/
    /node_modules/
    /project-b/  <- git submodule
       /src
       /build/
       /node_modules

内部index.ts

import { classB } from '../project-b/src/classB';

我可以独立构建项目B,也可以使用tsconfig.json中包含的项目B来构建项目A,但是在运行时,节点无法从项目B中找到位于项目B的node_modules目录中的模块。

我尝试使用其中项目A和项目B均为工作区的纱线工作区,但是由于项目B产生了许多构建错误,导致项目A不再能够构建,因此无法进行项目A的构建以前。

正确的设置方法是什么?

更新: 一个示例是project-b依赖于'winston'记录器npm模块。 project-b文件夹中的yarn install将Winston软件包下载到project-b/node_modules。然后,我将yarn run build放在project-a文件夹中,并且项目成功构建,没有错误。如果然后我在node build/index.js文件夹中运行project-a,则说无法加载“ winston”模块。作为一个漏洞修复程序,我正在将此依赖项添加到project-a中,以修复运行时错误,但我不希望将project-b的所有依赖项都添加到project-a中。我认为问题在于,如果这是一个JavaScript项目,它将找到project-b/node_modules目录,但是因为在打字稿中,JavaScript位于build/中,所以文件夹树中没有project-b/node_modules文件夹。

1 个答案:

答案 0 :(得分:0)

评论中提供的答案:

  

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