我们有一个带有两个软件包的monorepo, foo 取决于 bar :
packages
foo
src
index.ts
bar
src
bar-sub1.ts
bar-sub2.ts
每个包outDir在其对应的tsconfig.json中都设置为“ dist”。
这是foo index.ts的示例:
import {sub1Class, sub1Function} from "bar/src/bar-sub1"
import {sub2Class} from "bar/src/bar-sub2"
[...]
如果我通过单击导航到导出的项目,则webstorm将打开相应的bar-subX.ts文件。很好。
如果我尝试构建foo,tsc不会抱怨,因为该路径确实存在。但是,当我尝试使用节点dist / index.js执行它时,它显示“错误:找不到模块'bar / src / bar-sub1'”。
因此,我需要使用 dist 而不是 src (“ bar / dist / bar-sub1”和“ bar / dist / bar-sub2” ),再次构建项目,它将与节点一起运行。事实是,我丢失了代码导航,因为当我单击导出的项目时,webstorm将打开为该文件而不是源代码生成的javascript。
或者,我一直在考虑使用'barrel',这是bar项目的根目录中的index.ts文件,该文件导出所有内容:
//bar index.ts
export {sub1Class, sub1Function} from "./bar-sub1";
export {sub2Class} from "./bar-sub2";
有了该文件,我可以在foo索引中导入类似的元素:
import {sub1Class, sub1Function, sub2Class} from "bar"
[...]
我可以浏览代码,构建项目并执行捆绑软件。
但是,当项目规模扩大时,我认为桶式方法不是“可扩展的”。
另一种方法是使用带有解析别名的webpack,将src文件夹解析为dist。但是,如果需要在每个依赖子包中设置它,这也是一个负担。
是否还有其他更简单的方法可以在proyect之间的打字稿上具有正确的导入路径(以monorepo方式)?