当我构建Angular库时,每当我尝试将模块类导入app.module.ts
并得到此错误{{1时,就将其发布到npm,并在另一个项目中用作依赖项。 }}。我已经从多个不同的站点按照步骤进行了有关如何创建,构建和发布角度库的工作,但我不知道为什么它不能将该类识别为有效的模块类。
在我的app.module.ts中,这就是我导入模块的方式:
Class TekButtonModule is not an Angular module
我的图书馆项目遵循Angular概述的标准目录结构。设置库项目时,没有对构建或路径设置进行任何更改。我的内置库项目有一个import { TekButtonModule } from "tek-angular-uimodules";
@NgModule({
imports: [
TekButtonModule
]
})
export class AppModule { }
,bundles
,esm5
,esm2015
,fesm5
,fesm2015
(我的自定义模块和组件是),lib
,package.json
(导出lib目录中的所有内容),public-api.d.ts
,README.md
(导出公共api)和{{1} }文件。
是否存在一些不需要的默认配置才能使模块正常工作的额外配置?
这是我的按钮模块类:
tek-angular-uimodules.d.ts
以下是我构建项目时生成的一些文件:
tek-angular-uimodules.metadata.json
:
import { CommonModule } from "@angular/common";
import { NgModule } from "@angular/core";
import { TekButton } from "./button";
@NgModule({
declarations: [
TekButton
],
exports: [
TekButton
],
imports: [
CommonModule
]
})
export class TekButtonModule {}
tek-angular-uimodules.d.ts
/**
* Generated bundle index. Do not edit.
*/
export * from './public-api';
public-api.ts
export * from "./lib/button";
export * from "./lib/button-group";
export * from "./lib/nav-bar";
如果我从esm5目录中手动将生成的 javascript 模块文件导入到我的app.module.ts文件中,则它可以正常工作。但是,当它应该与WebStorm像其他任何软件包一样为我自动导入的标准模块导入一起使用时,我必须手动执行此操作。
这是esm5目录下生成的模块js文件:
./lib/button/button-module.d.ts
感谢您的帮助。我可以提供更多代码,并在需要时提供屏幕截图。
答案 0 :(得分:3)
所以我在解决不同问题时遇到了同样的问题,所以我想在这里分享一下。
我刚刚将我的库更新为Angular9。除了奇怪的“ Class my-module is not Angular module”错误外,其他一切似乎都很好。
对我有用的是使用以下命令设置tsconfig.lib.ts文件:
...
"angularCompilerOptions": {
...,
"enableIvy": false
}
答案 1 :(得分:0)
所以我弄清楚是什么导致了我的特定问题。这是两件事。第二点是造成我问题的直接原因,第一点是使调试更加混乱。
ng build
,然后运行cd
到dist目录中的构建项目中,并运行npm pack
。然后,我将把构建的程序包作为文件依赖项安装在一个完全独立的项目中,以确保我正确执行了所有操作。我发现(或者我假设)即使在进行本地文件依赖安装时,也存在一种缓存机制。该缓存似乎与从tgz
生成的npm pack
文件的文件名有关。这种缓存导致不断重新安装第一个版本,无论我对内置库进行了多少更改。对我来说,解决方法是每次将tgz
文件重命名为不同的名称。您还应该更改库的版本号,这也应该起作用。src
- public-api.ts
- lib
-- button
--- index.ts
--- public-api.ts
--- button.component.ts
--- button.module.ts
-- another-module
-- yet-another-module
直接在src中的public-api.ts
文件看起来像这样:
export * from './lib/button'
// Other exports
src \ lib \ button下的public-api.ts
和index.ts
文件如下所示:
// public-api.ts
export * from './button.component.ts'
export * from './button.module.ts'
// index.ts
export * from './public-api.ts'
我假设通过将index.ts
文件添加到每个目录中,根public-api.ts
中的导出行将找到索引文件,并相应地导出文件,但是在行中的某个位置隐式解析不起作用,而是需要显式导出。解决方法是将export * from './lib/button'
更改为export * from './lib/button/index.ts'
或export * from './lib/button/public-api.ts'
。
第二点是导致我出现问题的直接原因,第一点在进行调试时使它变得非常混乱。