同时具有一致的导入路径和代码导航

时间:2019-08-23 03:48:42

标签: typescript webstorm monorepo

我们有一个带有两个软件包的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方式)?

0 个答案:

没有答案