我有一个使用 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",