1

我遇到了 AOT 编译和自定义包的问题。在我的场景中,我有一个 Angular/Cli 项目,它安装了我自己的包(包 A)。包 A 依赖于包含服务的包 B。

包 A 的 NPM 安装导致 node_modules 结构:

  • 节点模块
    • package_a
      • (package_a 文件)
      • 节点模块
        • 包_b
          • (package_b 文件)
          • 测试服务.ts

这似乎是有道理的,因为包 A 依赖于包 B 的某个版本,因此包 B 安装在嵌套的 node_modules 文件夹中。我还确保包 A 从包 B 中导出 TestService,以便它可用。

我遇到的问题是尝试从主项目访问包 B 中的服务时:

app.component.ts

import { Component } from '@angular/core';
import { TestService } from 'package_a';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [TestService]
})

export class AppComponent {
  constructor(
    private log: TestService,
  ) {}

  ngOnInit(): void {

    // call function from package_b
  }
}

首先,当我运行 ng serve 时,一切正常,完全没有问题。但是,当我尝试使用 AOT 编译构建项目时,它失败并出现错误:ERROR in ... Cannot find module.

如果我单独安装包 B,那么在主 node_modules 目录中有一个它的实例,那么整个事情就可以工作了。即使嵌套版本不同,它也会正确使用包 A 中定义的嵌套版本。

  • 节点模块
    • package_a
      • (package_a 文件)
      • 节点模块
        • package_b [版本 1.0.0]
          • (package_b 文件)
          • 测试服务.ts
    • package_b [版本 2.0.0]
      • (package_b 文件)
      • 测试服务.ts

有什么想法可以停止额外安装包 B 的需要吗?在主版本之前我是否缺少指向嵌套版本的内容?

4

0 回答 0