Angular 8: "Please add a @NgModule annotation" 将一个库包含到另一个库中时
Angular 8: "Please add a @NgModule annotation" when including a library into another library
我想在另一个共享库中使用我的一个共享库,但是我得到了
ERROR: Unexpected value 'LibraryModule in ...' imported by the module 'TestlibModule in ...'. Please add a @NgModule annotation.
这些库位于单独的 angular 应用程序(test 和 test2)中。
每个应用程序都包含一个库(通过 ng 生成库生成),我通过 运行 ng build library_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 可以毫无问题地包含到应用程序中,但在包含到库中时会因上述错误而崩溃。我无法找出我做错了什么。谁能指出我正确的方向?
这里有 2 个项目 test 和 test2。在 test 和 test2 项目中,您各有一个库。
解决问题的步骤:
测试 2 项目:
一个。 npm i
b。 npm 构建库
c。转到构建库的 dist 文件夹,然后 运行 "npm pack"。这将生成一个 .tgz 文件。复制并将其粘贴到测试项目中。为此,创建一个文件夹(称为包),然后粘贴到此处。
测试项目:
一个。在 package.json 中,将库的文件路径替换为:
"library": "file:./packages/library.1.0.0.tgz",
这里library.1.0.0.tgz是npm pack后生成的tgz文件名。您可以重命名它。
b。 npm i
c。 npm 运行 build 和 ng build testLib.
d.尝试 运行ning 应用程序,现在使用 ng serve 命令。希望这有效。
注意:您需要按顺序执行的步骤。
我找到了另一种解决方案:
在您的库项目 (testlib) 中,您从库集 TestlibModule 导入模块
"fullTemplateTypeCheck": false, 在 angularCompilerOptions
所以,用这个
更新testlib项目的tsconfig.lib.json
文件
"angularCompilerOptions": {
...
"fullTemplateTypeCheck": false,
...
}
现在两个库都可以正常构建,您也可以在任何应用程序中导入它们
我想在另一个共享库中使用我的一个共享库,但是我得到了
ERROR: Unexpected value 'LibraryModule in ...' imported by the module 'TestlibModule in ...'. Please add a @NgModule annotation.
这些库位于单独的 angular 应用程序(test 和 test2)中。 每个应用程序都包含一个库(通过 ng 生成库生成),我通过 运行 ng build library_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 可以毫无问题地包含到应用程序中,但在包含到库中时会因上述错误而崩溃。我无法找出我做错了什么。谁能指出我正确的方向?
这里有 2 个项目 test 和 test2。在 test 和 test2 项目中,您各有一个库。
解决问题的步骤:
测试 2 项目:
一个。 npm i
b。 npm 构建库
c。转到构建库的 dist 文件夹,然后 运行 "npm pack"。这将生成一个 .tgz 文件。复制并将其粘贴到测试项目中。为此,创建一个文件夹(称为包),然后粘贴到此处。
测试项目:
一个。在 package.json 中,将库的文件路径替换为: "library": "file:./packages/library.1.0.0.tgz",
这里library.1.0.0.tgz是npm pack后生成的tgz文件名。您可以重命名它。
b。 npm i
c。 npm 运行 build 和 ng build testLib.
d.尝试 运行ning 应用程序,现在使用 ng serve 命令。希望这有效。
注意:您需要按顺序执行的步骤。
我找到了另一种解决方案:
在您的库项目 (testlib) 中,您从库集 TestlibModule 导入模块
"fullTemplateTypeCheck": false, 在 angularCompilerOptions
所以,用这个
更新testlib项目的tsconfig.lib.json
文件
"angularCompilerOptions": {
...
"fullTemplateTypeCheck": false,
...
}
现在两个库都可以正常构建,您也可以在任何应用程序中导入它们