类不是Angular模块-仅在导入本地构建的Angular库时在IntelliJ / Webstorm中

时间:2019-10-17 16:32:08

标签: angular intellij-idea angular-library

我正在尝试使用在单独的Angular应用程序中存在的库(项目)中实现的Angular模块。在IntelliJ中,我遇到错误Class MyModule is not an Angular module,并且在我可以为该项目成功运行ng build的同时,IntelliJ中似乎无法识别所有库。更奇怪的是,我实际上在另一个Angular应用程序中存在两个Angular库,并且我可以毫无问题地使用另一个库中的模块。

我访问过其他与class is not an Angular module类似的问题,但似乎与它们无关。

3 个答案:

答案 0 :(得分:1)

这是我绕了几个小时后发现的答案。在主项目中如何使用有问题的库是

    lib的npm link文件夹中的
  • build
  • npm link @my-org/my-new-lib在应用中,我看到了问题。

还有ng build @my-org/my-new-lib --watch的lib库,这使我可以同时处理两个项目,并立即在目标应用程序中看到结果。

问题显然是由于IntelliJ中的错误-https://youtrack.jetbrains.com/issue/WEB-38354?_ga=2.263408847.258701770.1571260138-1443411092.1565629801-即使库已正确链接到目标应用程序的{,它也会自动排除路径中与dist的依赖关系{1}} IntelliJ排除了它,因此该库实际上在IDE中不可用。

解决方法(类似于jetbrains票证中的建议)是在目标应用程序的IDE中进入符号链接的node_modules-右键单击它,然后选择标记目录为-> 不排除

希望这可以为某人节省一些时间,因为它确实令人困惑并且难以克服。

答案 1 :(得分:0)

我在Angular 9+项目中也遇到了类似的问题。如果是这种情况,您应该启用一个IntelliJ选项以使其起作用。基本上,它支持在d.ts中支持Ivy元数据,这就是问题的原因。

  1. 访问IntelliJ的注册表(Cmd / Ctrl-Shift-A并在搜索栏中键入 Registry
  2. 寻找angular.enableIvyMetadataSupport并将其激活。
  3. 重新启动IDE

然后您就可以轻松使用图书馆

import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { AttachmentModule } from "attachment"; // <- This is the Library

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    AttachmentModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

如果有人想了解更多详细信息,请在这里https://blog.jetbrains.com/webstorm/2020/02/using-angular-9-in-webstorm/

阅读

答案 2 :(得分:0)

对于那些使用 Angular 10+ 遇到这个问题的人,我遇到的问题是我导入了一个我以前没有使用过的模块(在我的例子中是 OverlayModule),而 Angular 在 Ivy 编译阶段跳过了这些模块,例如。带有 Compiling @angular/cdk/overlay : es2015 as esm2015 的部分。我的解决方案是重新运行 ng serve。然后 Intellij 能够将导入视为 Angular 模块。

我确实在 ng 服务之间运行了 npm install,但我认为这一步不是必需的,因为 Angular CLI 是进行编译的,而且自上次安装以来我没有更改任何依赖项。