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()
;