Node
: >=16.0.0
NPM
: >=7.0.0
Lerna
: npm i -g lerna
- Клонируем проект:
git clone <url> -b <branch>
- Устанавливаем зависимости (из корня проекта):
npm i
- Собираем проект (из корня проекта, необходимо т.к. некоторые модули работают только из сборки):
npm run build
В случае ошибки при сборке вида: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
:
Это значит что Node не хватает выделенной памяти на выполнение процесса.
Посмотреть текущую выделенную память можно командой: node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'
(Мб).
Для решения этой проблемы была создана команда npm run build:memory
(для Windows) и build:memory-unix
(для Unix систем), команда выделяет разово на выполнение следующей операции указанную память, чего должно хватить на сборку. В случае нехватки можно увеличить:
NODE_OPTIONS="--max-old-space-size=5120" # Increase to 5 GB
NODE_OPTIONS="--max-old-space-size=6144" # Increase to 6 GB
NODE_OPTIONS="--max-old-space-size=7168" # Increase to 7 GB
NODE_OPTIONS="--max-old-space-size=8192" # Increase to 8 GB
В случае пустой, вновь созданной БД:
- Инициализируем БД:
npm run cli bootstrap
- Заускаем миграции (предварительно необходимо переместить конфиг
.env
с подключениями к БД в корень, после миграций его можно удалить и оставить только вapi/
):
npx directus database migrate:latest
- запуск последних актуальных миграций.
Дополнительные команды:
lerna bootstrap
- установка всех зависимостей в связанных проектах/модулях (если нужен отделно работающий модуль).npx lerna clean -y
- удаление всех зависимостей в связанных проектах/модулях (удобное удалениеnode_modules
, кроме корня).npx directus bootstrap
- инициализация БД директуса (только если ставим директус впервые на пустую БД).
-
Запуск без
lerna
, для разработкиapi
,app
,nest-api
.
Из корня проекта:npm run go
Запуститсяapi
,nest-api
иapp
, приложение будет доступно по адресу:http://localhost:8080/
-
Запуск через
lerna
- полный запуск всех модулей проекта (из под Windows через консоль и привычное Ctrl+C полная остановка процессов ноды поднятых через лерну невозможна, после оставки через консоль зайдите в Диспетчер задач -> Подробности, найдите все процессы ноды и остановите их)
Из корня проекта:npm run dev
, приложение будет доступно по адресу:http://localhost:8080/
-
Nest API и API имеют общий
.env
файл конфигураций, который должен распологаться в/api/.env
. -
Раздел
packages/schema
, который отвечает, в том числе, за идентификацию коллекций не только из схемыpublic
в версии9.8.0
(и даже в еще более ранней версии) перестал ожидаемым образом работать. Изначально ожидалось, что модуль будет брать переменную средыDB_SEARCH_PATH="array:public,ib,pim"
и считывать указанные схемы, но он этого не делает и возвращает пустой набор. Для корректной работы с модулем из версии9.8.0
необходимо удалить данную переменную или оставить одну единственную схемуpublic
, но тогда все остальные коллекции в схемах, помимоpublic
, перестанут распознаваться как коллекции.
Поэтому модульpackages/schema
в версии9.8.0
был заменен на такой же модуль из версии9.0.0
(с некоторыми доработками) где подобных проблем не наблюдалось. -
В проект интегрирован UI Framework
Quasar
, который своими классами перебивает некоторые базовые классы проекта, поэтому был создан override классов для quasar. Расположение:app/src/styles/quasar/override
. Для 2-й версииQuasar
необходим"sass": "1.32.11"
(в случае ошибок sass после обновления версии директуса необходимо понизить версию sass до указанной). -
В новых версиях
Directus
добавился редирект на/admin/
, поэтому пришлось его убрать и добавить привычный/api/
ко всем запросам обращения.
Были затронуты:app/vite.config.js
- изменено проксирование наapi
;app/src/api.ts
- добавлен префиксapi/
в инстансaxios
;api/src/app.ts
- добавлен префикс/api/
во всемapp.use('/api/url')
;app/src/router.ts
- удален префиксadmin
вhistory: createWebHistory(getRootPath())
;app/src/utils/get-root-path.ts
-return '/'
;app/src/utils/get-root-path.ts
- добавлениа функцияgetAssetsPath()
, которая возвращает путь до статики с препискойapi/
и найдены во всем проекте все обращения по путиgetRootPath() + assets/
и заенены наgetAssetsPath()
;