用* glob理解TypeScript中的 "baseUrl "和 "paths"。

问题描述 投票:0回答:1

我有一个用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模式,并对我的本地模块进行非相关的导入?

typescript tsconfig monorepo tsconfig-paths
1个回答
0
投票

根应该单独定义,因为 /@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",
© www.soinside.com 2019 - 2024. All rights reserved.