Как настроить tsconfig.json для вывода файлов из нескольких исходных папок в один плоский outDir?

У меня есть несколько проектов машинописи (например, client и server), которые имеют некоторые общие функции (находятся в папке common). Рассмотрим эту структуру папок:

+ client
|  - tsconfig.json
|  + src
|     - client.ts
+ common
   + src
      - util.ts

Где client.ts импортирует утилиту таким образом:

import { Util } from '../../common/src/util';

Для краткости я опускаю папку server, которая находится на том же уровне, что и client. После транспиляции в папку out я хотел бы получить вот такую ​​простую плоскую структуру папок:

+ client
|  + out
|     - client.js
|     - util.js

... и в идеале я мог бы просто импортировать обычную утилиту, не зависящую от фактической папки:

import { Util } from './util';

Как настроить tsconfig.json для этого?

Я пробовал разные комбинации rootDirs, baseUrl и paths, но все равно получаю подпапки client и common (даже включая подпапку src) в out.


person Jan Dolejsi    schedule 29.10.2017    source источник


Ответы (3)


И теперь у нас есть поддержка ссылок на проекты в Typescript 3.0 (то есть каскадная сборка нескольких проектов Typescript). Мы также можем управлять выходным расположением tsc сборок.

https://blogs.msdn.microsoft.com/typescript/2018/07/30/announcing-typescript-3-0/#project-references

Если в проекте Typescript 'bar' используется проект 'foo', вот как их связать:

// ./src/bar/tsconfig.json
{
    "compilerOptions": {
        // Needed for project references.
        "composite": true,
        "declaration": true,

        // Other options...
        "outDir": "../../lib/bar",
        "strict": true, "module": "esnext", "moduleResolution": "node",
    },
    "references": [
        { "path": "../foo" }
    ]
}

Спасибо, ТС ребята!

person Jan Dolejsi    schedule 26.07.2018

Я решил эту проблему в своем текущем проекте (с такой же настройкой), поместив ссылку на общую библиотеку в оба источника.

common/
  src/
    lib/
client/
  src/
    lib/ -> $PROJECT_PATH/common/src/lib/
server/
  src/
    lib/ -> $PROJECT_PATH/common/src/lib/

Компиляция и объединение становятся прозрачными, поскольку инструменты рассматривают этот каталог как локальный.

person fs_    schedule 10.01.2018
comment
По мере того, как я изучаю другие варианты, этот постепенно начинает казаться мне лучшим вариантом. Так грустно. - person S. Tarık Çetin; 08.11.2020

На данный момент вы не можете.

Я нахожусь в ситуации, похожей на вашу, я осмотрелся, но похоже, что нет способа изменить это поведение с помощью конфигурации TypeScipt.

Лучшее, что вы можете сделать, это использовать что-то еще (задачу Grunt, сценарий оболочки и т. д.) для перемещения файлов js и удаления сгенерированных папок после каждой сборки.

person Giovanni P.    schedule 10.01.2018