angular6 如何在另一个库中导入一个库?

angular6 how to import a library in another library?

如标题所示,我使用 ng generate library lib 生成了一个基础库;然后我生成了另一个名为 lib2 的库。我希望使用lib的一些基本组件或服务,所以我在lib2模块中导入了lib,但是npm run build lib2失败了。

我收到此错误:error TS2307: Cannot find module 'lib'

如何正确导入基础库?感谢任何帮助。

我把我的测试代码放在https://github.com/dyh333/ng6-test

你需要先构建你的库,看这个问题Angular 6 CLI -> how to make ng build build project + libraries

如果您查看 tsconfig.json 文件,它已通过添加库的路径进行了修改 - 因此您需要构建它们以填充 dist 文件夹。

"paths": {
  "lib": [
    "dist/lib"
  ],
  "lib2": [
    "dist/lib2"
  ]
}

我将添加一个答案来扩展使用 nx 扩展的概念(我将其用于除 quickee/stubs 之外的所有项目):

这假设您已将 ng-packagr 设置为在 nx 工作区内构建库。

创建您的库等。假设您有 lib1 和 lib2。

现在,假设 lib1 使用了 lib2 中的一些东西。

  • 构建 lib2
  • npm link lib2 的构建输出,来自 repo 的根目录。
  • 在lib1中,从BUILT版本的lib2中导入你需要的资源,即 将根据您为该库配置的输出进行配置... ...不是 tsconfig.ts 中的版本!!!你想要什么都行 在 "dest" 属性 的 linked 库的 package.json 中配置,在 linking 之后,你应该在 node_modules 中找到。
  • 构建 lib1
  • 盈利!

这听起来可能有点奇怪,但如果你仔细想想,感觉就在那里。您使用库的方式与在外部应用程序中使用它们的方式完全相同(好吧,不完全一样,您正在 linking 它们,但这模拟了 package.json 安装)。

还请注意,在单声道存储库中,您可以只使用跨库的相对导入(再次忽略 tsconfig 路径条目,只使用相对路径从其他库获取文件)。它有效,可能在技术上不正确,但可以让您省去一些麻烦。

我在一个大项目中遇到了这个问题,是我来解决的,我发现这两种方法都满足了需要,既呈现给了团队,也呈现给了我,他们说什么都可以(抱歉拒绝讨论团队的决定)。

请注意,我看不出这在非 nx-extensions 设置中不起作用的原因。但我很少在任何地方与他们一起工作,我所做的很大一部分工作是宣传 monorepo dev,当面对 Angular 时,NX 就是我与团队合作的对象。

如果你在模块中导入两个库(两个库之间没有依赖关系); 例如 Module1 import lib1 想使用 lib2 组件;

在 lib1.module.ts 中导出你的 sharig 组件,如

exports: [Component1]

在 lib2.module.ts 中导入您的根模块,如

imports: [lib1.forRoot()]

然后你的 lib2 组件你可以使用 Component1 的选择器,比如

<x-component></x-component>