Angular类不是Angular模块

时间:2019-07-19 22:02:53

标签: javascript angular typescript npm angular-module

当我构建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 { } bundlesesm5esm2015fesm5fesm2015(我的自定义模块和组件是),libpackage.json(导出lib目录中的所有内容),public-api.d.tsREADME.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

感谢您的帮助。我可以提供更多代码,并在需要时提供屏幕截图。

这是我尝试导入模块时遇到的错误: enter image description here

2 个答案:

答案 0 :(得分:3)

所以我在解决不同问题时遇到了同样的问题,所以我想在这里分享一下。

我刚刚将我的库更新为Angular9。除了奇怪的“ Class my-module is not Angular module”错误外,其他一切似乎都很好。

对我有用的是使用以下命令设置tsconfig.lib.ts文件:

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

答案 1 :(得分:0)

所以我弄清楚是什么导致了我的特定问题。这是两件事。第二点是造成我问题的直接原因,第一点是使调试更加混乱。

  1. 为了测试构建的程序包,我将运行ng build,然后运行cd到dist目录中的构建项目中,并运行npm pack。然后,我将把构建的程序包作为文件依赖项安装在一个完全独立的项目中,以确保我正确执行了所有操作。我发现(或者我假设)即使在进行本地文件依赖安装时,也存在一种缓存机制。该缓存似乎与从tgz生成的npm pack文件的文件名有关。这种缓存导致不断重新安装第一个版本,无论我对内置库进行了多少更改。对我来说,解决方法是每次将tgz文件重命名为不同的名称。您还应该更改库的版本号,这也应该起作用。
  2. 我的文件结构如下:
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.tsindex.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'

第二点是导致我出现问题的直接原因,第一点在进行调试时使它变得非常混乱。