Предотвращение дублирования конфигураций пути Typescript в Monorepo - PullRequest
1 голос
/ 19 января 2020

Гист

Мне нравится следовать принципу "dry" (не повторяйся). Но в настоящее время у меня есть почти одинаковая конфигурация пути в трех разных местах:

1. Файл конфигурации Typescript

У меня есть монорепо с несколькими пакетами Bazel Typescript, и поэтому мне нужно ссылаться на них такими путями внутри 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 config, чтобы тесты могли находить пути:

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

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Файл конфигурации Typescript

"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.

0 голосов
/ 20 января 2020

Вы используете пряжу, поэтому, вероятно, вам стоит взглянуть на рабочие области пряжи . Вы должны быть в состоянии добавить

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

и запустить yarn, который превратит символические ссылки в node_modules, и вы сможете удалить все три конфигурации выше

...