Когда люди создают новый проект 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 варианта ниже:
- Скомпилируйте код на localhost (или CI), чтобы получить
.js
файлы, и добавьте.ebignore
, чтобы EB развернул.js
файлы. - Управляйте файлами
.ts
и.js
в GIT. - Скомпилируйте и разверните отдельно. Значит, мы скомпилируем код в отдельное место, то есть
dist
, скопируем другие необходимые файлы, то естьpackage.json, public, views…
, и развернем этот каталогdist
. - Настройте
.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/