使用Angular 4时ngModule的问题

Dav*_*vid 5 angular

我有一个使用webpack配置的Angular(2)应用程序,它从另一个公共存储库导入模块.

因此,公共存储库有一个common.module.ts文件,其中包含以下内容:

@NgModule({
  imports: [...],
  declarations: [...],
  providers: [...],
  exports: [...]
})
export class CommonModule {}
Run Code Online (Sandbox Code Playgroud)

然后在我的主应用程序中,我在我的app.module.ts中导入它

@NgModule({
  imports: [
    ...
    CommonModule,
  ],
  declarations: [...],
  providers: [...],
  bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

这在Angular2中工作得很好,但后来我尝试在我的主项目中迁移到Angular 4.0(没有触及公共存储库,因为它也被其他未迁移的存储库使用).所以我在我的package.json中更改我的版本并重建,一切似乎都很好,但是当我在浏览器中加载应用程序时,我得到了这个

未捕获错误:模块"AppModule"导入的意外值"CommonModule".请添加@NgModule注释.

谁知道发生了什么事?已经使用@NgModule声明了CommonModule.我检查了node_modules以防导入的文件出现问题,并找到了包含的common_module.d.ts

...
export declare class CommonModule {}
Run Code Online (Sandbox Code Playgroud)

但对我来说很好,这是桶文件和装饰器已从这里删除.

有任何想法吗?

Dav*_*vid 2

好吧,我终于在Angular github上得到了帮助来让它工作。

所以,我要做的就是更改我的公共项目中的依赖项以使用任何> = 2.0.0 的角度库,如下所示

"dependencies": {
"@angular/core": ">=2.0.0",
"@angular/common": ">=2.0.0",
"@angular/router": ">=3.0.0",
"@angular/http": ">=2.0.0",
"@angular/platform-browser": ">=2.0.0",
Run Code Online (Sandbox Code Playgroud)

我运行yarn更新依赖项,然后将更改推送到我的 github 存储库。

在我的应用程序项目中,我升级了正在运行的公共库 yarn upgrade my_github_repo/common#feature/angular4 (feature/angular4 是我在其中推送更改的公共项目中的分支的名称)

就是这样,这样我的项目中就只有一个 Angular 库,4.0.0,这是我的应用程序使用的库。

我用另一个使用 Angular 2.0.0 的应用程序对此进行了测试,该应用程序也使用公共库,在本例中,我的 node_modules 中的 Angular 版本是 2.0.0,所以一切都很好。