在一个Typescript项目中使用另一个项目的最佳做法是什么?
你好,我目前有一个(核心)项目,我希望能够在其他(示例)项目中重用组件,两个项目都使用 typescript 。
我的第一个方法是将这个核心库作为子模块放在我的项目级别上,类似于这样:
sample
|--src/
|------file_using_core_ts
|--core
这会导致问题,因为我不能直接使用在core中声明的组件,因为这表明core在根文件夹之外,即src
所以我试着把core移到src里面,原则上这工作得很好,我可以运行这个项目(yarn dev),一切看起来都很完美,除了它在tsc上产生了问题,我不能进行构建。
简化一下这个项目,它应该是这样的:
sample
|--src/
|------core/
|----------src/
|-------------sample.ts
|-------------a.ts
|------file_using_core_ts
sample.ts使用a.ts,但是没有以相对方式导入,而是使用 src/a,这是有问题的,因为tsc认为路径引用 sample/src 而不是 sample/src/core/src。
简化例子
./src/core/src/sample.ts
Type error: Cannot find module 'src/a' or its corresponding type declarations.
> 5 | import a from 'src/a'
我不能改变核心导入来使用相对路径,我的选择可能是改变一些 typescript 设置或改变我的模块的位置。
我尝试在示例项目tsconfig中从类型检查中排除core
,我将
"exclude: [
"node_modules",
"src/core"
]
我尝试了“src/core/*.,/core,etc....”的不同变体,但都不起作用,我理解在这种情况下,即使您排除了文件夹,tsc也会被迫检查键入的内容。
我想知道是否有更好的方法来实现这一点,或者是否有一种方法来配置类型检查,因为毕竟项目在运行 yarn run dev 时运行良好,这只是一个类型检查问题。
请,如果你有一个更描述性的标题的问题,建议它在评论中,我会很乐意改变它。
非常感谢
1条答案
按热度按时间wj8zmpe11#
我认为你想要的不是子模块,而是让core成为一个私有的(npm或其他注册表)包,并在你的项目中使用它。或者看看
workspaces
的配置。这允许你声明多个包并交叉引用它们。https://docs.npmjs.com/cli/v7/using-npm/workspaces