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

问题描述 投票:7回答:2

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

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

如何正确导入基础库?任何帮助表示赞赏。

我将测试代码放入https://github.com/dyh333/ng6-test

angular angular-cli angular6 angular-cli-v6
2个回答
6
投票

您将需要先构建您的库,请参阅此问题Angular 6 CLI -> how to make ng build build project + libraries

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

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

0
投票

我将添加一个答案,扩展使用nx扩展的概念(我在我的所有项目中都使用了quicke / stubs):

这假设您已设置ng-packagr以在nx工作区中构建库。

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

现在,假设lib1使用来自lib2的内容。

  • Build lib2
  • npm从仓库的根链接链接lib2的构建输出。
  • 在lib1中,从BUILT版本的lib2中导入所需的资产,将根据您为该库配置的输出进行配置......不是tsconfig.ts中的版本!!!你想要什么在链接库的package.json中的“ dest”属性中进行配置。在链接后,您应该在node_modules中找到它。
  • build lib1
  • 利润!

这听起来可能有点奇怪,但是如果您考虑一下,感觉就在那里。您使用库的方式与在外部应用程序中使用库的方式完全相同(嗯,并不是完全相同,您正在链接它们,但这模拟了package.json安装的过程)。

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

我在一个大项目中就碰到了这个问题,这是我的解决方案,我发现这两种方法都满足了需求,并向团队和我展示了他们所说的一切(拒绝接受。讨论团队的决定)。

请注意,我认为没有理由在非nx扩展设置中将无法正常工作。但是我很少在任何地方与他们合作,我的工作很大一部分是宣传monorepo开发人员,当与Angular面对时,NX是我与团队合作的对象。

© www.soinside.com 2019 - 2024. All rights reserved.