Angular 8: «Пожалуйста, добавьте аннотацию @NgModule» при включении библиотеки в другую библиотеку - PullRequest
1 голос
/ 01 апреля 2020

Я хочу использовать одну из моих общих библиотек в другой общей библиотеке, но я получаю

ERROR: Unexpected value 'LibraryModule in ...' imported by the module 'TestlibModule in ...'. Please add a @NgModule annotation.

Библиотеки находятся в отдельных angular приложениях (test и test2). Каждое приложение содержит одну библиотеку (сгенерированную с помощью библиотеки генерации ng), которую я создаю, запустив ng build имя_библиотеки

библиотека в тестовом приложении (называемая testlib) включает библиотеку от test2 (называемая библиотекой) до npm* Пакет 1006 *

. json:

...
"dependencies": {
  "@angular/animations": "~8.2.14",
  ...
  "library": "file:../../test2/test2/dist/library"
},

testlib.module.ts

import { NgModule } from '@angular/core';
import { TestlibComponent } from './testlib.component';
import { LibraryModule } from 'library';

@NgModule({
  declarations: [TestlibComponent],
  imports: [
    LibraryModule
  ],
  exports: [TestlibComponent]
})
export class TestlibModule { }

tsconfig.lib. json во включенной библиотеке

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/lib",
    "target": "es2015",
    "declaration": true,
    "inlineSources": true,
    "types": [],
    "lib": [
      "dom",
      "es2018"
    ]
  },
  "angularCompilerOptions": {
    "annotateForClosureCompiler": true,
    "skipTemplateCodegen": true,
    "strictMetadataEmit": true,
    "fullTemplateTypeCheck": true,
    "strictInjectionParameters": true,
    "enableResourceInlining": true
  },
  "exclude": [
    "src/test.ts",
    "**/*.spec.ts"
  ]
}

LibraryModule может быть без проблем включен в приложение, но он вылетает с упомянутой ошибкой при включении в библиотеку. Я не могу понять, что я делаю неправильно. Кто-нибудь может указать мне правильное направление?

1 Ответ

1 голос
/ 01 апреля 2020

Здесь у вас есть 2 проекта test и test2. В проекте test и test2 у вас есть библиотека для каждого.

Шаг для устранения проблемы:

  1. Test2 Проект:

    a. npm i

    b. npm сборка библиотеки

    c. Go в папку dist, в которой находится сборка библиотеки, затем запустите "npm pack". Это сгенерирует файл .tgz. Скопируйте это и вставьте это в тестовый проект. Для этого создайте папку (называемую пакетами), затем вставьте ее здесь.

  2. Тестовый проект:

    a. В пакете. json замените путь к файлу для библиотеки следующим образом: "library": "file: ./ packages / library.1.0.0.tgz",

    Здесь library.1.0.0.tgz - это имя файла tgz, сгенерированного после npm pack. Вы можете переименовать это.

    b. npm i

    c. npm Запустите build и ng build testLib.

    d. Попробуйте запустить приложение, теперь используя команду ng serve. Надеюсь, это сработает.

Примечание : шаги, которые необходимо выполнить последовательно.

...