Как локально протестировать вложенные библиотеки в Angular?

#angular #angular-library

Вопрос:

У меня в библиотеке есть два компонента с именами lib-анкета и lib-выбор.

Компонент lib-анкета использует lib-варианты, подобные этому, в своем html-файле.

 <div class="row">
  <div class="col-xs-12">
    <lib-choices
       [name]="name"
       [id]="id"
       [choices]="choices">
    </lib-choices
  </div>
</div>
 

Но так как у меня есть изменения в моей lib-анкете, например, добавление другого ввода, например, такого:

 <div class="row">
  <div class="col-xs-12">
    <lib-choices
       [name]="name"
       [id]="id"
       [multipleChoices]=true
       [choices]="choices">
    </lib-choices
  </div>
</div>
 

Добавленный ввод, который является [MultipleChoice], в настоящее время не объявлен в lib-вариантах в производстве, но я объявил его в своем локальном.

Я попытался сначала создать lib-варианты локально, затем создать lib-анкету, но она не создается, так как не может принять мой новый ввод, поскольку он еще не реализован в производстве.

Мой вопрос в том, как создать оба моих компонента в библиотеке локально?

Комментарии:

1. Являются ли эти два компонента двумя разными библиотечными модулями? Согласно вашему вопросу, они оба находятся в одной библиотеке. Тогда почему и как вы строите их по отдельности?

2. Да, у них разные модули. При построении я использую команду ng build @lib/анкета и ng build @lib/выбор .

3. Я использовал команду ng g library @lib/component -p lib —файл ввода /общедоступный api для создания обоих компонентов.

Ответ №1:

Вы можете использовать ссылку npm, которая создает символическую ссылку в каталоге node_modules зависимых приложений/библиотек. Это включает в себя:

  • Запуск npm link в местной библиотеке
  • Запуск npm link @local-library-name в главном приложении
  • Но убедитесь, что вы установили «preserveSymlinks»: true в файле angular.json для приложений/библиотек вашего хоста.:
     "build": {
      "builder": "@angular-devkit/build-ng-packagr:build",
      "options": {
        "preserveSymlinks": true,
        "tsConfig": "projects/button/tsconfig.lib.json",
        "project": "projects/button/ng-package.json"
      }
    }, 
 

В вашем случае вы можете сделать следующее:

  • Войдите в @lib/choices каталог и запустите npm link
  • Войдите в @lib/questionnaire каталог run npm link @lib/choices и выполните сборку. Вы также можете сделать npm link это здесь, чтобы вы могли использовать его в главном приложении с помощью npm link @lib/questionnaire

Комментарии:

1. Должен ли я по-прежнему выполнять сборку ng @lib/компонента , а также обновлять свой package.json для пути к файлу? Я попытался выполнить npm-ссылку и проверил свой angular.json как для библиотеки, так и для хост-приложения, в котором обе «Предварительные ссылки» установлены как истинные. Но хост-приложение не получает мои изменения для обоих.