使用 * glob 了解 TypeScript 中的"baseUrl"和"paths"



我有一个使用 yarn 工作区和以下文件夹结构创建的 monorepo:

├── foo                   (workspace @project/foo)
│   ├── package.json
│   └── src
│       └── index.ts
├── bar                   (workspace @project/bar)
│   ├── package.json
│   └── src
│       └── index.ts
├── package.json          (monorepo root)
└── tsconfig.json         (base tsconfig)

以及tsconfig.json中的以下设置:

{
"compilerOptions": {
"baseUrl": ".",
"module": "commonjs",
"paths": {
"@project/foo/*": "./packages/foo/src/*",
"@project/bar/*": "./packages/bar/src/*"
},
...
}
}

@project/bar工作区中,我想从@project/foo导入模块:

import foo from "@project/foo";

但是我收到以下错误:

找不到模块 '@project/foo' 或其相应的类型声明.ts(2307(

如果我从"paths"对象的键和值中删除*符号,代码就会编译。为什么?如何保持*glob 模式并对本地模块进行非相对导入?

根应该单独定义,因为/块从导入@project/foo,只允许@project/foo/@project/foo/something

"@project/foo": "./packages/foo/src",
"@project/bar": "./packages/foo/bar",
"@project/foo/*": "./packages/foo/src/*",
"@project/bar/*": "./packages/bar/src/*"

在 monorepo 的情况下,你不能使用/*因为编译后,它将无法以与 monorepo 运行时相同的方式访问。

正确的方法是指向public_api项目

"@project/foo": "./packages/foo/src/public_api",
"@project/bar": "./packages/foo/bar/public_api",

子项目也是如此:

"@project/foo/sub": "./packages/foo/src/sub/public_api",

相关内容

  • 没有找到相关文章

最新更新