我正在尝试使用 ng-pacakgr 将模块 X 与 Y 的依赖关系打包。X 和 Y 具有服务和组件。
应用程序/模块结构是:
- ModuleX 导入 ModuleY
- X.forRoot() 提供 ServiceY。
- ServiceY 用于 AppModule 和 ModuleX。
- AppModule 导入模块 X.forRoot() 和 Y.forRoot()。
AppModule - ModuleY - ServiceY - ModuleX - ServiceX - ModuleY - ServiceY
使用 ng-packagr 打包 ModuleX 告诉我:
在 options.globals 中没有为外部模块“Y”提供名称 - 猜测“Y”
好的
运行该应用程序不会给出任何错误,但似乎我有两个 ServiceY 实例。
查看 chrome 中的 webpack 源代码,我有两次 ServiceY:
- webpack://
- ./node_modules/Y/src/y.service.js
- pathToX/node_modules/Y/src/y.service.js
在两个 ServiceY 的构造函数中定位断点表明它在两个类中都停止了。
理论上,ServiceY 应该在我的整个应用程序中实例化一次,因为 ServiceY 在应用程序的根目录中提供
我尝试添加具有各种值的选项 umdModuleIds,但看起来并没有什么不同。
总之,我有两个唯一的 ServiceY 实例(一个由应用程序导入,另一个由 X 导入(并重新定义))。
问题是:
- taht 来自哪里。
- 我怎么能确定 Y 在我的应用程序中只实例化一次。
- 我应该在 umdModuleIds 中配置什么(如何找到 moduleId)
谢谢。
版本信息
ng-packagr: 2.4.2
@angular/*: 5.2.9
typescript: ~2.4.2
rxjs: 5.5.8
node: 6.10.3
npm: 3.10.10