#javascript #node.js #typescript #npm #nestjs
#javascript #node.js #typescript #npm #nestjs
Вопрос:
Я создал базовое приложение с помощью инструмента CLI (версия 6.3.0) и достиг точки, когда я был готов перейти на производственный сервер и столкнулся с проблемой.
Я развертываю с помощью Shipit (что, вероятно, не имеет значения), и частью этого процесса является установка зависимостей npm (с флагом --production
).
Все развертывается без сбоев, пока мое развертывание не выполнит последнюю команду npm run start:prod
(для запуска приложения Nest в процессе узла). Который выполняет следующие шаги:
- Удаляет содержимое каталога dist
rimraf dist amp;amp; npm run build
; - Пытается перестроить содержимое каталога dist
tsc -p tsconfig.build.json
; - Выполняется
node dist/main.js
;
Проблема со всем этим заключается в том, что TypeScript
пакет, который, как я полагаю, предоставляет tsc
команду, является devDependency, а не зависимостью, которая устанавливается во время установки npm с --production
флагом.
Это ошибка, или я полностью упускаю суть npm run start:prod
команды. Я ценю, что глобальная установка пакета TypeScript может решить проблему, хотя я не был уверен, было ли это намерением или предположением?
Если вы развертываете NestJS в производство, используете ли вы какую-то другую стратегию?
Комментарии:
1. Спасибо, Ким, я не уверен, что он полностью ответил на мой вопрос, но я пометил его как правильный, поскольку он прошел долгий путь к нему (и я сомневаюсь, что на данный момент будут еще ответы).
Ответ №1:
В серверных приложениях различие между dependencies
и devDependencies
не так важно, поскольку вы не отправляете свои зависимости и, следовательно, размер вашего приложения не так критичен.
Однако при развертывании в облаке может потребоваться сэкономить место. TypeScript не требуется для запуска вашего приложения после его компиляции. И вам не нужно перекомпилировать ваше приложение, если вы просто хотите его перезапустить. Итак, что вы могли бы сделать вместо этого:
Удалите prestart:prod
скрипт.
Процедура развертывания:
- Установите все зависимости с помощью
npm install
- Выполнить
npm run build
- Сократите зависимости разработчика с помощью
npm prune --production
- Выполнить
npm run start:prod
Это в значительной степени то, что происходит при развертывании в heroku.
В качестве альтернативы, вы, конечно, можете объявить typescript
under dependencies
вместо devDependencies
.