Недавно мы пытались развернуть последнюю версию Gurn, используя флаг NODE_ENV
, установленный на production
, на первый взгляд это имеет смысл. Сейчас мы находимся в производстве, поэтому мы хотим убедиться, что все работает так, как будто оно находится в производстве. Однако это вызывает проблемы при работе с gulp и typescript.
В настоящее время мы запускаем нашу сборку TypeScript на этапах развертывания Elastic Beanstalk непосредственно перед запуском приложения. Мы делаем это через gulp.
Ошибка, которую мы получали, была:
[11:55:22] Local gulp not found in /var/app/current [11:55:22] Try running: npm install gulp npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! @gradient/[email protected] start: `gulp && node ./dist/index` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the @gradient/[email protected] start script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
В нашей среде NODE_ENV
установлено на production
, а NPM_USE_PRODUCTION
установлено на false
. Переменная среды NPM_USE_PRODUCTION
добавляется Elastic Beanstalk и действует только для того, чтобы задать вопрос о том, следует ли добавить флаг --production
на этапе установки NPM. Однако, как указано в Документах NPM
С флагом
--production
(или когда для переменной средыNODE_ENV
установлено значениеproduction
), npm не будет устанавливать модули, перечисленные вdevDependencies
.
Как оказалось, NODE_ENV
на самом деле имеет приоритет, а это означает, что gulp и наши типы TypeScript не устанавливались, и, следовательно, gulp не существовал локально.
Мы решили использовать NODE_ENV=live
сейчас вместо production
, это поможет нам избежать поведения по умолчанию, но гарантирует, что у нас все еще есть что-то, за что можно зацепиться в нашей системе, чтобы увидеть, находимся ли мы на клиентском сервере.
Конечная цель, к которой мы сейчас будем стремиться, — это переход от TypeScript к JavaScript на нашем CI (circle-ci), а затем отправка этого в Elastic Beanstalk, но мы еще не достигли этого!