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

时间:2018-07-17 06:18:14

标签: angular angular-cli angular6 angular-cli-v6

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

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

我将添加一个答案,该答案扩展了使用nx扩展的概念(我的所有项目都使用该扩展,但quickee / stubs除外):

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

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

现在,假设lib1使用lib2中的某些内容。

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

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

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

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

请注意,我认为没有理由在非nx-extensions设置中不起作用。但是我很少在任何地方与他们合作,我所做的很大一部分是宣传monorepo开发人员,当与Angular面对时,NX是我与团队合作的对象。