2

要旨

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

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

4

2 回答 2

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();

笑话配置文件

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

于 2020-03-30T17:40:34.707 回答
0

您正在使用纱线,所以您可能应该看看纱线工作区。您应该可以添加

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

并运行yarn这将使符号链接进入node_modules,您应该能够删除上面的所有三个配置

于 2020-01-20T16:03:41.000 回答