У меня есть приложение Nest JS как часть рабочего пространства Angular / Nx.
В приложении nest я использую nestjs-console
для запуска команд (например, для загрузки данных прибора).
Для гнезд js -консольных документов это включает в себя:
- Создание
console.ts
файла - Добавление скрипта в пакет . json как
"console:dev": "ts-node --project apps/api/tsconfig.console.json apps/api/src/console.ts"
- Вызов его, например, с помощью
npm run console:dev -- --help
Теперь я использовал Nx для создания библиотеки общего кода между Приложения.
Это хорошо работает для команд в Angular CLI (test
; serve
et c.), но задача nest js -console по понятным причинам завершается неудачно с:
Ошибка: не удается найти модуль '@ my-workspace / my-lib'
Итак, вопрос в том, как передать команду nest js -console под управление Angular CLI (или запускать команды Nest JS другим способом).
Я чувствую, что можно добавить пользовательскую задачу в angular.json
, которая использует существующий компоновщик и затем каким-то образом указывает на кон единоличная команда. (Я не чувствую, что мне нужен пользовательский конструктор , но я могу ошибаться в этом).
Я застрял, потому что я не очень знаком с этой средой, и angular. json конфигурация рабочего пространства .
Любая помощь приветствуется, будь то:
- Рекомендации по заходам на посадку
- Примеры I можно копировать
- Указатели c указатели
РЕДАКТИРОВАТЬ
Я пытался использовать Nest JS Контекст приложения напрямую (а не через nestjs-console
) и согласно этому сообщению в блоге , запустив его с ts-node
.
Это имеет те же проблемы, что и раньше. Я считаю, что эта проблема связана с тем, как ts-node обрабатывает пути в tsconfg.
Если я изменю способ импорта общего кода из:
import { HeadwordDto } from '@my-workspace/my-lib';
В:
import { HeadwordDto } from '../../../../../../libs/my-lib/src';
Тогда все работает, но tslint жалуется на «импорт библиотеки должен начинаться с @ my-workspace / (nx -force-module-boundaries)». Я могу видеть, как это побеждает точку Nx.
В качестве альтернативы, проблема, которую я считаю paths выглядит немного странной и включает такие инструменты, как tspath или модуль-псевдоним . Это также не приносит пользы от Nx.
Я добавил новую цель Architect к angular. json, которая аналогична цели build
(используя @nrwl/node:build
builder), за исключением того, что он создает требуемый контекст приложения:
"build-console": {
"builder": "@nrwl/node:build",
"options": {
"main": "apps/api/src/console.ts", // build console application context
"outputPath": "different/output/path", // can run alongside app
...
}
},
После того, как это будет сделано, его можно будет запустить через узел :
node ./different/output/path/main.js –help
EDIT 2
Опираясь на описанный выше подход, можно также использовать execute build для непрерывного построения контекста консольного приложения в отдельном окне терминала:
"serve-console": {
"builder": "@nrwl/node:execute",
"options": {
"buildTarget": "api:build-console",
"port": 7778,
"args": ["--help"]
}
},
Отсюда, я полагаю, следующим шагом могло бы стать превращение контекста консольного приложения в отдельное приложение с собственным проектом в angular. json и просто извлечение необходимого кода. Начинаю чувствовать, что команда Nx примерно на 58 шагов впереди меня; -)
Не уверен, что это лучшее решение, но оно работает. Как и прежде, любые советы приветствуются!