Angular 8:将一个库放入另一个库时"Please add a @NgModule annotation"



我想在另一个共享库中使用我的共享库之一,但我得到了

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

这些库位于单独的angular应用程序(test和test2(中。每个应用程序都包含一个库(通过ng生成库生成(,我通过运行ng生成库_name 来构建它

测试应用程序中的库(称为testlib(包括从test2(称为库(到npm 的库

package.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可以毫无问题地包含在应用程序中,但当它包含在库中时会因上述错误而崩溃。我不知道自己做错了什么。有人能给我指正确的方向吗?

我又找到了一个解决方案:

在库项目(testlib(中,从库集导入模块TestlibModule

"fullTemplateTypeCheck":false,在angularCompilerOptions

因此,使用此更新testlib项目的tsconfig.lib.json文件

"angularCompilerOptions": {
...
"fullTemplateTypeCheck": false,
...
}

现在这两个库都构建得很好,你也可以在任何应用程序中导入

这里有两个项目测试和test2。在test和test2项目中,每个项目都有一个库。

解决问题的步骤:

  1. Test2项目:

    a。npm i

    b。npm构建库

    c。转到构建库的dist文件夹,然后运行"npm-pack"。这将生成一个.tgz文件。复制并粘贴到测试项目中。为此,创建一个文件夹(称为packages(,然后粘贴到此处。

  2. 测试项目:

    a。在package.json中,将库的文件路径替换为:"库":"文件:./packages/library1.0.0.tgz",

    这里library.1.0.0.tgz是在npm包之后生成的tgz文件的名称。你可以重命名它。

    b。npm i

    c。npm运行构建和ng构建testLib。

    d。尝试运行应用程序,现在使用ng-server命令。希望这能奏效。

注意:需要按顺序执行的步骤。

相关内容

最新更新