3

我正在尝试使用 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
4

0 回答 0