【问题标题】:angular6 how to import a library in another library?angular6 如何在另一个库中导入一个库?
【发布时间】:2018-12-24 17:52:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 使用 Nx Workspace 可以让您的生活更轻松,因为有多个应用程序/库和依赖项。我建议花 30 分钟试一试:nrwl.io/nx/guide-nx-workspace

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


【解决方案1】:

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

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

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

【讨论】:

  • 我已经构建 lib1 成功,但是构建 lib2 失败,因为 lib2 导入了 lib1。
  • ng build lib 然后ng build lib2 然后ng serve - 与您的存储库代码一起工作。
  • emmm...你能告诉你的 angular-cli 和 angular 版本吗?谢谢。这是我的:Angular CLI:6.1.0-rc.0;角度:6.0.0
  • 我用你的 package.json 运行了 yarn installng --v 返回 @angular/cli: 6.0.8, Angular: 6.0.9, ng-packagr: 3.0.3。也许 ng-packagr 是罪魁祸首?尝试删除 node_modules 并重新安装。
  • @ibenjelloun - 今天早上我在您发表评论后尝试了 Nx,但出现了一些阻塞问题 - 两个 ng 生成失败并且 ng serve 无法正常工作。
【解决方案2】:

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

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

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

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

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

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

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

我在一个大项目中遇到了这个问题,这是我要解决的问题,我发现这两种方法都满足了需求,向团队和我提出了他们所说的一切都可以(抱歉拒绝讨论团队的决定)。

请注意,我认为这在非​​ nx 扩展设置中不起作用。但我很少在任何地方与他们合作,我所做的大部分工作是宣传 monorepo 开发,当面对 Angular 时,NX 是我与团队一起工作的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2017-10-23
    相关资源
    最近更新 更多