Хорошо, я отвечу на свой вопрос с кратким изложением других ответов и некоторыми дополнительными опциями.
Подумав, я пришел к осознанию. Вопрос в том, кто и когда запускает tsc
для компоновки Typescript из LibraryA в Javascript? По сути, есть только несколько вариантов:
- Разработчик LibraryA запускает его и публикует скомпилированный результат (где-то);
- Библиотека A публикуется в виде исходного кода, и компиляция происходит при установке пакета на WebserverB;
- Библиотека A публикуется в виде исходного кода, и сборка WebserverB также компилирует библиотеку.
Давайте рассмотрим каждый из них подробно.
1. Опубликовать скомпилированный результат
Тогда возникает вопрос: где хранится опубликованный результат? Это должно быть где-то, где NPM может получить к нему доступ. Таким образом, есть только несколько вариантов:
- npm Registry (частный, если вы можете себе это позволить, общедоступный, если вы согласны с этим). Недостаток: ну, за это надо платить.
- Тарбол на каком-то сервере, где вы можете получить URL к нему. Недостаток: вы должны получить сервер для размещения этих. И позаботьтесь об указанном сервере.
- Новый репозиторий GIT. Тарболируется, потому что npm не может разархивироваться из репозитория git. Недостаток: теперь у вас есть два хранилища для одного проекта.
- Тот же самый репозиторий git, где живет LibraryA. По сути, вы не только фиксируете свои исходные файлы TypeScript, но и скомпилированный результат. Недостаток: фиксация артефактов компиляции просто неправильно . И вы публикуете свои источники вместе с скомпилированными результатами. Вам не нужны такие в WebserverB.
- Тот же самый репозиторий git, где живет LibraryA, но в отдельной, отключенной ветке. Недостаток: это сбивает с толку. Сколько репозиториев вы видели с двумя отключенными основными ветками?
Тем не менее, несмотря на недостатки, все они являются исправными вариантами.
2. Компилировать при установке
Основным недостатком здесь является то, что это сразу ставит зависимость от машинописи в WebserverB. И не просто зависимость от разработки, а полная зависимость времени выполнения. Это может быть хорошо, но это становится действительно странным. Как вы планируете развертывать WebserverB? Будет ли это запускать компиляцию? Я не думаю, что это путь. Но это возможно. Подробнее см. H.B.
.
3. Компилировать вместе с WebserverB
Ну, если вы планируете использовать его только в проектах машинописного текста, это может быть нормально. Я не уверен насчет его установки. Вам нужно изменить файл tsconfig.json
, чтобы включить в компиляцию node_modules/LibraryA
. Это странно. И будет ли ваша IDE рада этому? В общем, это тоже не очень хорошая идея. Это похоже на борьбу / злоупотребление системой, и это редко заканчивается хорошо.
В конце, я думаю, я пойду с подходом "commit compiled JS". Потому что " просто неправильно " не является хорошим аргументом. А поскольку это частный проект, дополнительные опубликованные источники также не представляют большой проблемы. На самом деле, возможно, они даже помогут отладить.