【问题标题】:Prevent Duplicating Typescript Path Configurations in Monorepo防止在 Monorepo 中复制 Typescript 路径配置
【发布时间】:2020-01-19 18:31:29
【问题描述】:

要点

我喜欢遵循“干”(不要重复自己)的原则。但目前我在三个不同的地方有几乎相同的路径配置:

1。打字稿配置文件

我有一个带有多个 Bazel Typescript 包的 monorepo,因此我需要在 tsconfig.json 中使用类似这样的路径来引用它们

"paths": {
  "@cents-ideas/enums": ["./packages/enums"],
  "@cents-ideas/utils": ["./packages/utils"],
  "@cents-ideas/event-sourcing": ["./packages/event-sourcing"],
  "@cents-ideas/models": ["./packages/models"]
},

2。节点包文件

对于使用ts-node 的开发,我还需要添加package.json 的路径,以便Node.Js 可以识别Typescript 别名。 (为此,我使用了一个名为 module-alias 的包。

"_moduleAliases": {
  "@cents-ideas/enums": "./packages/enums",
  "@cents-ideas/utils": "./packages/utils",
  "@cents-ideas/event-sourcing": "./packages/event-sourcing",
  "@cents-ideas/models": "./packages/models"
}

3。 Jest 配置文件

最后我还需要将这些路径添加到我的 Jest 配置中,以便测试可以找到路径:

moduleNameMapper: {
  '^@cents-ideas/utils(.*)$': '<rootDir>/packages/utils$1',
  '^@cents-ideas/event-sourcing(.*)$': '<rootDir>/packages/event-sourcing$1',
  '^@cents-ideas/enums(.*)$': '<rootDir>/packages/enums$1',
  '^@cents-ideas/models(.*)$': '<rootDir>/packages/models$1',
},

目标

我的目标是有一个可以放置路径的公共位置,并且所有其他位置都会自动更新。


如果您需要进一步了解该项目,可以在这里查看:https://github.com/flolude/cents-ideas

【问题讨论】:

    标签: typescript jestjs bazel monorepo module-alias


    【解决方案1】:

    打字稿配置文件

    "paths": {
      "@cents-ideas/*": ["./packages/*"]
    },
    

    节点包文件

    const moduleAlias = require('module-alias');
    
    const registerAliases = () => {
      if (process.env.ENV === 'dev') {
        const fs = require('fs');
        const paths: string[] = fs.readdirSync('./packages');
        paths.forEach(addPackageAlias);
      }
    };
    
    const addPackageAlias = (name: string) => {
      moduleAlias.addAlias(`@cents-ideas/${name}`, `${__dirname}../../../packages/${name}`);
    };
    
    registerAliases();
    

    Jest 配置文件

    在 Bazel 的帮助下修复。但我确信 Jest 支持与 Typescript 配置类似的通配符。

    【讨论】:

      【解决方案2】:

      您正在使用纱线,因此您可能应该查看yarn workspaces。你应该可以添加

      package.json
      {
        //...
        "workspaces": [
          "packages/*
        ]
      }
      

      然后运行yarn,它将符号链接变成node_modules,您应该能够删除所有上述三个配置

      【讨论】:

      • 好吧,我忘了提这个。但由于与 Bazel 不兼容的原因,我实际上已经离开了 yarn 工作区
      猜你喜欢
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2020-02-27
      • 2018-03-25
      相关资源
      最近更新 更多