Webstorm NodeJs интерпретатор из Docker контейнера

от автора

В этой статье описан процесс развертывания NodeJs приложения, используя NodeJs интерпретатор, находящийся в Docker контейнере, в качестве проектного (по умолчанию). Решение скорее всего будет актуально только для пользователей ОС Linux системы, так как в итоге интерпретатор будет взят из официального образа node на DockerHub.

Зачем?

Приложение можно развернуть, имея на хост-машине только docker, нет необходимости устанавливать интерпретатор самостоятельно, что позволит разработчику иметь конкретную версию интерпретатора для конкретного проекта, а также при смене версии образа в проекте от разработчика ручной настройки не потребуется, новый экземпляр интерпретатора будет использован в проекте автоматически.

Решение

Для примера было создано приложение на ReactJs + Typescipt, так как при некорректной настройке интерпретатора как минимум сломается подсветка кода.

1. Создадим приложение из готового шаблона:

$ npx create-react-app reactjs-typescript-custom-nodejs --template typescript

2. Напишем Dockerfile:

FROM node:14 WORKDIR /app  CMD cp /usr/local/bin/node /app/docker/node \     && npm install \     && npm run start

Здесь можно подробнее описать команду CMD, интерпретатор копируется из контейнера Docker в папку с приложением /app/docker/node, сама папка /app является корневой директорией приложения в контейнере. Далее выполняется установка зависимостей и старт приложения в режиме разработки.

3. Создадим в проекте директорию node с путем docker/node и поместим туда файл .gitignore, который игнорирует все в только что созданной папке:

*

4. Далее выполним команду в терминале из корня проекта:

docker build -t client . && docker run -it --rm --volume=${PWD}:/app -p 3000:3000 --name client client

Здесь мы собираем образ из Dockerfile и задаем ему тег, после чего запускаем контейнер в интерактивном режиме -it с последующим удалением контейнера --rm, создаем привязку директории проекта на хост-машине к корневой директории приложения в контейнере--volume=${PWD}:/app, открываем порт в сети -p 3000:3000 и задаем имя контейнеру --name client.

Таким образом при запуске контейнера экземпляр интерпретатора копируется на хост машину по пути docker/node/node, осталось указать его путь в настройках idea:

Итог

Приложение разворачивается в dev режиме, корректная подсветка кода, hot-reload и прочие функции, работающие из коробки в react-scripts, при смене версии официального образа NodeJs в Dockerfile дополнительная настройка idea не потребовалась.

Исходный код готового решения доступен на github.

ссылка на оригинал статьи https://habr.com/ru/post/507034/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *