Есть ли в tsconfig возможность компилировать сервер и клиент в общую и личную папку?

У меня есть проект typescript, и у меня есть следующая файловая структура

builds
-dev
--public
--private
-production
--public
--private

src
-server
-client

tsconfig
package.json 

Я хочу, чтобы мой src/server компилировался в личные папки сборки, а src/client — в общедоступные папки. Я использую Parcel в качестве компилятора, который использует tsc. Итак, мой вопрос: можно ли это сделать с помощью параметров компилятора одного tsconfig. Потому что я заметил, что вы можете указать только 1 выходной каталог. Или мне нужно было бы сделать 2 tsconfigs в каталоге сервера и клиента и как-то использовать оба?

Все примеры, которые я смог найти, были сделаны с помощью Webpack, и я действительно настроен на использование Parcel. Организация проекта TypeScript на стороне клиента и сервера, компиляция


person Michael    schedule 23.12.2019    source источник


Ответы (1)


Для создания составной сборки для следующего требуется как минимум машинописный текст версии 3.0.

См. https://www.typescriptlang.org/docs/handbook/project-references.html

Вы будете использовать два tsconfig: один в src/server и один в src/client; Вам также понадобится рут tsconfig.json.

В корне вам понадобятся:

"references": [{
    "path": "./src/client"
}, {
    "path": "./src/server"
}]

Тогда в src/client/tsconfig.json вам понадобится следующее:

"compilerOptions": {
    "outDir": "../../builds/dev/public",
    "rootDir": ".",
    "composite": true
}

Сделайте то же самое для server.

Теперь, когда вы запускаете tsc --build из корневого каталога, каждый из подпроектов будет создан и помещен в соответствующие выходные файлы. Импорт и экспорт будут работать так, как если бы все существовало в одном проекте.

Полный пример см. в проекте project-references-demo.

person smac89    schedule 23.12.2019
comment
Это работает, но теперь его компилирует tsc. Как насчет Parcel, он мне вообще нужен тогда? - person Michael; 24.12.2019
comment
@ Майкл, я не знаю, как применить к этому parcel, потому что я никогда его не использовал. Я отвечал относительно того, как добиться этого разделения с помощью tsconfig и машинописного текста. Я думаю, что применение его к посылке будет зависеть от того, для чего вы используете посылку. Видя, что машинописный текст будет просто создавать js, я думаю, что парцелла может помочь с объединением всех js в один файл или разделением его на несколько файлов для оптимизации скорости. - person smac89; 24.12.2019