Сбой производственного развертывания при использовании скриптов CLI package.json

#javascript #node.js #typescript #npm #nestjs

#javascript #node.js #typescript #npm #nestjs

Вопрос:

Я создал базовое приложение с помощью инструмента CLI (версия 6.3.0) и достиг точки, когда я был готов перейти на производственный сервер и столкнулся с проблемой.

Я развертываю с помощью Shipit (что, вероятно, не имеет значения), и частью этого процесса является установка зависимостей npm (с флагом --production ).

Все развертывается без сбоев, пока мое развертывание не выполнит последнюю команду npm run start:prod (для запуска приложения Nest в процессе узла). Который выполняет следующие шаги:

  1. Удаляет содержимое каталога dist rimraf dist amp;amp; npm run build ;
  2. Пытается перестроить содержимое каталога dist tsc -p tsconfig.build.json ;
  3. Выполняется node dist/main.js ;

Проблема со всем этим заключается в том, что TypeScript пакет, который, как я полагаю, предоставляет tsc команду, является devDependency, а не зависимостью, которая устанавливается во время установки npm с --production флагом.

Это ошибка, или я полностью упускаю суть npm run start:prod команды. Я ценю, что глобальная установка пакета TypeScript может решить проблему, хотя я не был уверен, было ли это намерением или предположением?

Если вы развертываете NestJS в производство, используете ли вы какую-то другую стратегию?

Комментарии:

1. Спасибо, Ким, я не уверен, что он полностью ответил на мой вопрос, но я пометил его как правильный, поскольку он прошел долгий путь к нему (и я сомневаюсь, что на данный момент будут еще ответы).

Ответ №1:

В серверных приложениях различие между dependencies и devDependencies не так важно, поскольку вы не отправляете свои зависимости и, следовательно, размер вашего приложения не так критичен.

Однако при развертывании в облаке может потребоваться сэкономить место. TypeScript не требуется для запуска вашего приложения после его компиляции. И вам не нужно перекомпилировать ваше приложение, если вы просто хотите его перезапустить. Итак, что вы могли бы сделать вместо этого:

Удалите prestart:prod скрипт.

Процедура развертывания:

  1. Установите все зависимости с помощью npm install
  2. Выполнить npm run build
  3. Сократите зависимости разработчика с помощью npm prune --production
  4. Выполнить npm run start:prod

Это в значительной степени то, что происходит при развертывании в heroku.

В качестве альтернативы, вы, конечно, можете объявить typescript under dependencies вместо devDependencies .