Как запустить команды nest js -console в контексте рабочей области Angular / nx - PullRequest
0 голосов
/ 19 января 2020

У меня есть приложение Nest JS как часть рабочего пространства Angular / Nx.

В приложении nest я использую nestjs-console для запуска команд (например, для загрузки данных прибора).

Для гнезд js -консольных документов это включает в себя:

  1. Создание console.ts файла
  2. Добавление скрипта в пакет . json как "console:dev": "ts-node --project apps/api/tsconfig.console.json apps/api/src/console.ts"
  3. Вызов его, например, с помощью 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 шагов впереди меня; -)

Не уверен, что это лучшее решение, но оно работает. Как и прежде, любые советы приветствуются!

1 Ответ

0 голосов
/ 29 марта 2020

Как и у вас, у меня были проблемы с настройкой. Моя ошибка сводилась к синтаксическим ошибкам, которые в соответствии с некоторыми проблемами в github ts-node были связаны с тем, что узел не мог правильно прочитать импорт, потому что это был общий синтаксис js. Мое решение было следующим:

  1. Добавьте tsconfig.console. json рядом с tsconfig.app. json в вашем приложении nx.
  2. Убедитесь, что tsconfig. console. json содержит "module": "commonjs" внутри "compilerOptions". Кроме этого я скопировал tsconfig.app. json.
  3. В пакете. json добавьте следующую строку: "console:dev": "ts-node --project apps/api/tsconfig.console.json -r tsconfig-paths/register apps/api/src/console.ts" в ваши скрипты.

Надеюсь, это поможет Вы или кто-либо еще.

...