Разработка на локальном компьютереNode.jsПриложение, вам необходимо установить Node.js и подготовить систему управления базой данных, необходимую для приложения. Чтобы установить Node.js локально, вы можете напрямую загрузить и использовать установочный пакет, чтобы в вашу систему была включена только одна версия Node.js. Если вы хотите иметь несколько версий Node.js одновременно, вы можете использовать NVM, инструмент для управления несколькими версиями Node.js, установленными на вашем компьютере, и вы можете переключаться между разными версиями.
Еще один способ создать среду разработки приложений Node.js — использоватьDocker. Далее я расскажу об использовании Docker и Docker Compose для создания среды разработки Node.js на локальном компьютере. В качестве демонстрации я буду использовать фреймворк приложения Nest.js.
необходимость
Чтобы использовать Docker локально, установите настольную версию Docker, например Docker для Windows или Docker для Mac. Использование Docker Desktop на компьютере Mac не должно вызывать особых проблем, но для запуска Docker Desktop в Windows есть некоторые требования.
Система должна быть Windows 10 Professional или Enterprise Edition, обычная Windows 10 не будет работать, и в системе должен быть включен Hyper-V.
Подготовить
Загрузите и установите настольную версию Docker, которая довольно велика и занимает некоторое время.Перед загрузкой вам необходимо войти в свою учетную запись Docker Hub.
- Windows: https://docs.docker.com/docker-foru-windows/install/
- macOS: https://docs.docker.com/docker-foru-Mac/install/
Большинство операций Docker необходимо выполнять в интерфейсе командной строки, поэтому вам необходимо подготовить интерфейс командной строки.Пользователи macOS могут использовать терминал, который идет в комплекте с системой (Терминал), пользователям Windows рекомендуется скачать и установить полную версию Cmder, а затем создайте новый Bash в качестве командной строки администратора.
настроить
Когда Docker создает контейнер, ему нужно использовать какие-то образы, то есть, если у вас нет этих образов в вашей системе, Docker автоматически отправится в место для загрузки образа, сохранит его на вашем компьютере, а затем создаст. на основе этого изображения. Контейнер, который вам нужен.
Место для загрузки этих образов по умолчанию находится за границей, поэтому мы иногда медленны в Китае.Решение состоит в том, чтобы настроить Docker для использования внутреннего адреса ускорения изображений. Например, Alibaba Cloud временно предоставляет эту услугу, вы можете использовать своюАли КлаудВойдите в сервис зеркалирования контейнеров Alibaba Cloud под своей учетной записью, и вы найдете в нем адрес ускорения зеркала, который выглядит так: https://wgaccbzr.mirror.aliyuncs.com
Настройте адрес ускорения, который вы нашли в сервисе образов облачных контейнеров Alibaba, в зеркалах реестра Docker.
Среда разработки Nest.js
Затем мы используем Docker Compose для создания среды разработки, которая может запускать приложения Nest.js локально.
docker-compose.yml
Docker Compose позволяет нам описать сервисы (контейнеры), необходимые приложению, в файле, создать новый каталог для проекта, который вы хотите разработать, а затем создать файл docker-compose.yml в корневом каталоге. Сначала добавьте две строки кода внутрь:
version: '3'
services:
использоватьversion
Настройте использование версии Docker Compose, и несколько служб, необходимых для среды разработки, будут доступны через некоторое время.services
Определено ниже.
.env
Службы, определенные в файле docker-compose.yml, могут использовать некоторые переменные среды, и эти переменные среды и соответствующие значения можно поместить отдельно в файл с именем.env
В файле этот файл эквивалентен файлу конфигурации. Создайте пустой файл в корневом каталоге проекта с именем:.env
.
Инструмент командной строки для подготовки приложений Nest.js
Если вы планируете разработать Node-приложение на основе фреймворка Nest.js, вы можете сначала установить инструмент командной строки (@nestjs/cli), предоставляемый этим фреймворком, который позволяет нам использовать команды для создания нового приложения и некоторых компонентов. нужно в приложении. Однако, поскольку мы планируем использовать Docker для создания среды разработки приложений, мы не будем устанавливать этот инструмент непосредственно на компьютер, поскольку для этого потребуется установить на компьютер Node.js.
существуетdocker-compose.yml
Служба определена в файле, и ее функция заключается в том, чтобы позволить нам использовать инструменты командной строки, предоставляемые в среде Nest.js, для открытияdocker-compose.yml
файл, вservices
Давайте добавим сервис инструмента командной строки:
version: '3'
services:
cli:
image: nestjs/cli
volumes:
- ./app:/workspace
tty: true
Вышеизложенное определяетcli
Служба, вы можете определить имя произвольно, эта служба используетimage
, то есть зеркалоnestjs/cli
,volumes
Установите функцию объема данных, что означает, что каталог приложения в текущем каталоге соответствует каталогу в контейнере./workspace
это место. Пучокtty
установлен вtrue
заключается в том, чтобы этот контейнер работал все время.
Откройте терминал системы (Terminal), пользователям Windows рекомендуется использовать Cmder. Входитьdocker-compose.yml
каталог, в котором находится файл, затем запустите службу:
cd ~/desktop/ninghao-nestjs
docker-compose up -d cli
Выше выполняются две команды, первая строка — вводdocker-compose.yml
Каталог, в котором находится файл, вторая строка команды выполняется в фоновом режимеdocker-compose.yml
Тот, который определен в файле, называетсяcli
услуга. Убедитесь, что служба запущена:
docker-compose ps
Name Command State Ports
-------------------------------------------------
ninghao-nestjs_cli_1 /bin/sh Up 3000/tcp
Обратите внимание, что служба находится в состоянии Up, что означает, что она работает. Вы можете войти в систему ниже.cli
Служить:
docker-compose exec cli /bin/sh
После ввода командная строка будет выглядеть так:
/workspace #
В этом контейнере мы можем использовать инструменты командной строки в приложении Nest.js для выполнения:
nest
Появятся некоторые справочные сообщения:
Usage: nest [options] [command]
Options:
-V, --version output the version number
-h, --help output usage information
Commands:
new|n [options] [name] Generate Nest application
generate|g [options] [name] [path] Generate a Nest element
Available schematics:
Создайте приложение с помощью инструмента командной строки Nest
в созданныйcli
После этого контейнера вы можете выполнитьnest
Command, воспользуемся этой командой для создания проекта Nest.js. воплощать в жизнь:
nest new app
Появится что-то вроде этого:
⚡ We will scaffold your app in a few seconds..
CREATE /app/.prettierrc (51 bytes)
CREATE /app/README.md (3370 bytes)
CREATE /app/nest-cli.json (84 bytes)
...
выше используетсяnest new
команда создает проект, вставляетapp
ниже каталога, хотя вcli
Этот проект создается в контейнере, но мы настроили объем данных этого сервиса, поэтому созданный файл проекта также будет виден на локальном компьютере. То есть это у вас на локальном компеdocker-compose.yml
Ниже каталога, в котором находится файл, вы увидите значокapp
каталог, здесь находится созданный проект Nest.js.
При разработке приложения, если вы хотите использоватьnest
Инструмент командной строки генерирует файлы, необходимые для проекта, вы можете ввести этоcli
внутри сервисного контейнера, а затем используйтеnest
команда для создания того, что вам нужно.
При создании проекта вам может быть предложено:
Failed to execute command: git init
Git repository has not been initialized
Это связано с тем, что после создания проектаnest
Команда инициализирует репозиторий кода, но он не установлен в этом контейнере.git
, так что будут проблемы при выполнении связанных команд. Вы можете использовать Git для локального управления исходным кодом вашего проекта.
Обратите внимание, что если вы чувствуете, что скорость создания проекта низкая, вы можете войти вcli
После того, как служба окажется внутри, выполните:
npm config set registry https://registry.npm.taobao.org
определить службу приложения
существуетdocker-compose.yml
В файле определите службу, которая запускает приложение Nest.js:
nest:
image: node:${NODE_VERSION}
working_dir: /home/node/app
command: npm config set registry https://registry.npm.taobao.org
command: npm run start:dev
volumes:
- ./app:/home/node/app
ports:
- ${APP_PORT}:3000
Вышеизложенное определяетnest
сервис, потому что созданное нами приложение основано на фреймворке Nest.js, поэтому имя этого сервисаnest
, вы также можете изменить свое любимое имя.
nest
для этой услугиimage
даnode
, конкретная версия использует переменную среды,NODE_VERSION
, эта переменная окружения также имеет соответствующее значение, которое должно находиться в.env
Настройте его в файле.
working_dir
Перейдите в рабочий каталог и выполните дваcommand
, нужно установитьnpm
Источник установки, чтобы установка пакета в дальнейшем была быстрее, второйcommand
Он управляет услугами разработки проекта.
volumes
Объем данных установлен таким образом, что текущая директорияapp
Этот каталог соответствуетnest
в этом служебном контейнере/home/node/app
, мы находимся под этим каталогом этого сервиса и выполняемnpm run start:dev
, который также будет запускать службу разработки для этого проекта Nest.js.
ports
Установка публичного порта означает установку порта на хосте (локальном компьютере) таким образом, чтобы этот порт соответствовал порту в контейнере. После запуска службы разработки для приложения Nest он будет использовать3000
Этот порт предоставляет услуги.${APP_PORT}
Вот это называетсяAPP_PORT
переменная среды, конкретное значение должно быть в.env
Установить в файле:
NODE_VERSION=11.13
APP_PORT=3000
обрати внимание на.env
файл, мы позволяемAPP_PORT
Значение этой переменной окружения равно3000
, то есть открытый порт должен быть3000:3000
, то есть на локальном компьютере3000
Порт соответствует тому, что в этом сервисе3000
порт.
с этим новымnest
сервис, чтобы запустить его снова:
docker-compose up -d nest
Если все в порядке, откройте браузер, перейдите по адресу http://localhost:3000, и вы должны увидеть «Hello World».
позже вам нужно использоватьnpm install
При установке некоторых пакетов для проекта можно ввести этоnest
Внутри службы используйтеnpm
. Вход в эту службу может выполнять:
docker-compose exec nest bash
Определить службы данных
Разработка приложений Nest.js поддерживает использование множества различных типов баз данных, вам необходимо создать соответствующий сервис, для какой системы баз данных вам нужно. Например, я хочу использовать в своем приложении базу данных, такую как MySQL, поэтому я могу использоватьdocker-compose.yml
Внутри определитеmysql
Служить:
mysql:
image: mysql:${MYSQL_VERSION}
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
ports:
- ${MYSQL_PORT}:3306
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
В сервисе используются некоторые переменные окружения, откройте.env
, в файле, чтобы определить эти переменные среды и соответствующие значения:
MYSQL_VERSION=5.7
MYSQL_PORT=3306
MYSQL_DATABASE=nest
MYSQL_USER=nest
MYSQL_ROOT_PASSWORD=root
MYSQL_PASSWORD=password
Главное — указать используемую версию системы MySQL, какой порт используется для доступа к этой службе данных на локальном хосте, а также имя, пользователя и пароль создаваемой базы данных. вы можете изменить.env
Значение этих переменных среды в файле для изменения конфигурации базы данных.
Вышеупомянутое создаст5.7
версия MySQL, порт, используемый для использования этой службы данных на локальном хосте,3306
Система создает базу данных под названиемnest
базу данных, вы можете использовать эту базу данных для работыnest
пользователя, соответствующий парольpassword
, и настроить систему базы данныхroot
Пароль пользователяroot
.
После определения этой службы данных вам необходимо запустить ее:
docker-compose up -d mysql
Просмотр журналов
Просмотр вывода журнала контейнера, вы можете сделать:
docker-compose logs --follow
приложение
докер-compose.yml:
version: '3'
services:
cli:
image: nestjs/cli
volumes:
- ./:/workspace
tty: true
nest:
image: node:${NODE_VERSION}
working_dir: /home/node/app
command: npm config set registry https://registry.npm.taobao.org
command: npm run start:dev
volumes:
- ./app:/home/node/app
ports:
- ${APP_PORT}:3000
mysql:
image: mysql:${MYSQL_VERSION}
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
ports:
- ${MYSQL_PORT}:3306
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
.env:
NODE_VERSION=11.13
APP_PORT=3000
MYSQL_VERSION=5.7
MYSQL_PORT=3306
MYSQL_DATABASE=nest
MYSQL_USER=nest
MYSQL_ROOT_PASSWORD=root
MYSQL_PASSWORD=password