我有一个用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";
但我得到以下错误。
找不到模块'@projectfoo'或其相应的类型声明.ts(2307)
如果我去掉 *
路径 "对象的键和值中的符号,代码就会被编译。为什么会这样?我怎样才能保持 "路径 "对象的 *
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。
正确的方法是指向项目的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",