【问题标题】:Understanding "baseUrl" and "paths" in TypeScript with * glob使用 * glob 理解 TypeScript 中的“baseUrl”和“路径”
【发布时间】:2020-06-03 08:12:35
【问题描述】:

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

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

【问题讨论】:

    标签: typescript tsconfig monorepo tsconfig-paths


    【解决方案1】:

    根应单独定义,因为/ 阻止@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",
    

    【讨论】:

    • 路径和根有什么区别?
    • roots(正确的是rootDirs)是您拥有项目/模块/组件的目录,而paths 是这些根目录中项目/模块/组件的别名,它们用于解析导入.
    • 感谢您的努力,但我认为这不能回答我的问题。我对本地模块的非相对导入特别感兴趣,例如就像在 monorepos 中一样,而 rootDirs 表面上旨在相对导入将在构建时聚集在一起的文件。
    • 你不能在 monorepo 中的项目之间使用相对导入,它必须始终是 projectNameprojectName/subProjects。据我了解您的问题,问题是@project/foo 不起作用。为此,您需要将@project/foo 添加到@project/foo/* 旁边的monorepo 的paths
    猜你喜欢
    • 2017-04-26
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2017-03-17
    • 2021-06-15
    • 1970-01-01
    相关资源
    最近更新 更多