我正在尝试使用在单独的Angular应用程序中存在的库(项目)中实现的Angular模块。在IntelliJ中,我遇到错误Class MyModule is not an Angular module
,并且在我可以为该项目成功运行ng build
的同时,IntelliJ中似乎无法识别所有库。更奇怪的是,我实际上在另一个Angular应用程序中存在两个Angular库,并且我可以毫无问题地使用另一个库中的模块。
我访问过其他与class is not an Angular module
类似的问题,但似乎与它们无关。
答案 0 :(得分:1)
这是我绕了几个小时后发现的答案。在主项目中如何使用有问题的库是
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元数据,这就是问题的原因。
angular.enableIvyMetadataSupport
并将其激活。然后您就可以轻松使用图书馆
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 是进行编译的,而且自上次安装以来我没有更改任何依赖项。