Когда люди создают новый проект NodeJS, скажем, используя ExpressJS, исходным кодом по умолчанию является JavaScript.
Однако что, если вы предпочитаете TypeScript, чтобы исходный код оставался более консолидированным? Например, проверка типов.

В этом случае исходный код, которым мы хотели бы управлять в GIT, будет TypeScript (.ts), а не JavaScript (.js).

Написав исходный код на TypeScript, мы можем протестировать локальный хост одним из двух способов:

  • Запускать localhost напрямую с помощью ts-node без компиляции из TypeScript (.ts) в JavaScript (.js)
  • Сначала скомпилируйте код (в TypeScript) в JavaScript и запустите как обычно. Например: node ./server.js

На вашем локальном хосте это выглядит нормально, однако развернуть проект в ElasticBeanstalk (NodeJS) может быть сложно.

Если вы используете конфигурацию по умолчанию для развертывания, только код, управляемый GIT, то есть TypeScript, будет развернут на сервере. Здесь, чтобы решить эту проблему, у нас есть как минимум 4 варианта ниже:

  1. Скомпилируйте код на localhost (или CI), чтобы получить .js файлы, и добавьте .ebignore, чтобы EB развернул .js файлы.
  2. Управляйте файлами .ts и .js в GIT.
  3. Скомпилируйте и разверните отдельно. Значит, мы скомпилируем код в отдельное место, то есть dist, скопируем другие необходимые файлы, то есть package.json, public, views…, и развернем этот каталог dist.
  4. Настройте .ebextensions для компиляции исходного кода на стороне ElasticBeanstalk перед запуском.

Решение 1 выглядит как простейшее, однако при его использовании я столкнулся с ошибкой с zip process, который продолжал выдавать ошибку Timestamp до 1980 года.

Решение 2 непонятно и не является хорошим решением. Это затрудняет управление исходным кодом и приводит к путанице при коммитах, потому что меняются не только файлы .ts, но и файлы .js.

Решение 3 является сложным и требует от нас найти способ как-то его автоматизировать: компиляция перед развертыванием, копирование необходимых файлов и необходимость кастомизации скриптов (возможно).

Решение 4 - лучшее для меня, почему?

  • GIT управляет TypeScripts, исходный код мы пишем только
  • Не испортить компиляцию localhost
  • Не нужно много конфигураций

Предполагается, что вы уже настроили приложение и среду ElasticBeanstalk для приложения NodeJS. Нам понадобится Компиляция:

  • После развертывания исходного кода (в EC2) и установки пакета
    npm install
  • До npm start (или что-нибудь еще в NodeCommand)

Что нам нужно сделать, это просто добавить файл конфигурации в .ebextensions, т.е. файл source_compile.config ниже:

# source_compile.config
container_commands:
  compile:
    command: "./node_modules/.bin/tsc -p tsconfig.json"
    env:
      PATH: /opt/elasticbeanstalk/node-install/node-v10.15.3-linux-x64/bin/

Конфигурация сообщает EB скомпилировать исходный код nodejs в /var/current/application командой tsc.

Ключ, на который мы должны обратить внимание, - это env, который позволяет отображать узел в ПУТЬ.

Не забудьте включить модуль typescript в зависимости вашего файла package.json. Он предоставит tsc в ./bin каталоге node_modules после установки машинописного текста.

"dependencies": {
  .......,
  "typescript": "^3.4.5",
  .......  
}

Если в вашем файле tsconfig.json нет конкретного outdir, скомпилированные файлы .js будут созданы в том же месте, что и файлы .ts, после command выполнения.

В заключение, чтобы написать исходный код на TypeScript и развернуть его в Elastic Beanstalk, просто добавьте несколько строк конфигураций для компиляции кода до того, как запуск сервера Node поможет решить нашу проблему.

P / s: Приняв к сведению развертывание Elastic Beanstalk в приложении Typescript, я обнаружил похожую статью, которая может вам помочь. Ссылка на https://www.errietta.me/blog/typescript-circleci-aws-beanstalk/