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>
如标题所示,我使用 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>