如何为现有的 Javascript 库创建 Angular 库包装器?

Posted

技术标签:

【中文标题】如何为现有的 Javascript 库创建 Angular 库包装器?【英文标题】:How does one go about creating an Angular library wrapper for an existing Javascript library? 【发布时间】:2018-12-23 13:46:26 【问题描述】:

假设存在一个用纯 javascript 编写的 Javascript 库,通常用于普通的非框架网站。如何创建一个可以轻松使用npm installed 的 Angular 库,以使该库无缝地在 Angular 应用程序中使用?

我在 Angular 文档或更广泛的网络上找不到这个过程的任何好的演示。

例如,有一个很棒的 Javascript 库,名为 p5.js,它不能直接与 Angular 一起使用。如何创建一个 Angular 模块,您可以简单地将其导入到您自己的 Angular 模块中,并在完全支持 Angular 的情况下使用它的所有强大功能?

【问题讨论】:

这有点取决于库的作用。是否使用 DOM 差别很大。 我问的是一个专门使用 DOM 但我对所有类型都很好奇 【参考方案1】:

就个人而言,我会使用 Angular CLI。 Angular CLI v6 内置了 ng-packgr。

看看create library story。它非常简单,可以帮助您快速入门,并指导您使用最佳更新实践。

更新:对于 Angular CLI v7 及更高版本,请参阅文档 here

【讨论】:

【参考方案2】:

为 Angular 包装原生库是一个复杂的过程,因为具体情况会随着库的变化而变化。话虽如此,我们可以利用个共同点。

设计包装库时的三个主要问题是:

    检测 Angular 库中的更改并将其委托给本机库。 检测本机事件并将它们冒泡到您的 Angular 库中。 使用 NgZone 切换执行进出 Angular。

其他考虑因素可能是性能、可伸缩性、在现有工具上添加新工具等。无论您处理的是什么库,您最终都可能会用函数包装函数,用类包装类,一个模块一个模块,等等。假设本机库有 1000 个特性。你会一一实现吗?

有一些方法可以避免手动实现本机库中的每个元素,同时仍将它们的功能引入您的包装库。 我已经在more details here回答了这个问题

【讨论】:

以上是关于如何为现有的 Javascript 库创建 Angular 库包装器?的主要内容,如果未能解决你的问题,请参考以下文章

如何为现有的动态网站制作android应用

是否可以使用现有的第三方框架(如 metaio 框架)创建静态库

如何为现有的 WCF 服务原生启用 JSONP?

如何为发布而不是调试创建密钥库?扑

如何为现有的本地集群配置和启用 Azure Service Fabric 反向代理?

如何为现有的非 android Eclipse 项目制作 android manifest?