如何在Dart代码中使用npm包?

22

我有一个运行在Dart编程语言上的Flutter应用程序。我已经发布了一个npm包,我想在我的Flutter应用程序中使用它。有没有办法可以在Dart中使用现有的npm包或者自动将npm包转换为Dart包?


3
我已经探索了这个问题并发现我们可以在Flutter中集成webview,我们可以在其中使用js代码。Flutter不支持直接在您的Flutter应用程序中包含npm包。您可以参考此链接: https://github.com/flutter/flutter/issues/17440#issuecomment-408363020 - Haider Ali
你在 https://stackoverflow.com/questions/56272616/use-npm-packages-in-flutter-mobile-app-webview 得到了答案吗?如果没有,可以查看以下链接:https://stackoverflow.com/questions/58366522/can-node-js-integrate-inside-flutter-mobile-application、https://dev59.com/MlQK5IYBdhLWcg3wKc7k 和 https://github.com/fluttercommunity/flutter_webview_plugin/issues/96。 - TWL
4个回答

2
Dart和Javascript是不同的编程语言。虽然可能可以将js转换为dart,但这并不容易做到,也难以维护,并且很可能无法推广使用。
除非您熟悉两种语言及其限制,否则不应尝试将NPM包转换为Dart代码,除非您别无选择。
我建议您重新用Dart编写NPM包。
备注:此答案基于假设您不想在webview中集成JS代码,而是实际在Dart VM中使用该代码。

1

1
我们将一个相当大的JS库手动转换为Dart,令人惊讶的是,由于这两种语言非常相似,转换非常容易。

0
简而言之:使用 WebView 或运行 Node/Deno/SpiderNode 子进程。

让我回答你的问题标题; 你需要将它包装在一个Webview或者一个node.js子进程中,使用类似于DBUS的IPC进行通信。这是2021年最前沿的实验性技术。

  • 如果它是一个小型的经过充分测试的软件包,你可以将其转换为Dart并自动运行测试。
  • 如果它是像Nuxt这样的大型软件包,就不要考虑了,或者将其放入WebView中。

如果这是你自己的软件包,考虑将其翻译成Dart,然后转换为JavaScript。从Dart到可读的Node/ES2021非常简单。

但是你真的想要用Dart来做所有的事情吗?在未来5到80年内,Dart社区会像Trois、Vue、WebXR TypeScript社区一样强大吗?

我的建议是,将Dart用于它擅长的客户端JavaScript,并使用经过充分测试的软件包,可以从TypeScript转换为Dart,或者使用WebView。

你能使用粘合子进程来运行node/deno/spidernode吗?可以看看Termux F-Droid的问题,如果你想在最新版本的Termux上运行Node服务器,就不能使用Google Play Store,而要使用F-Droid。基本上,JIT会使你的应用商店审核过程变慢,但他们只能从政策层面禁止它,而无法从技术层面禁止。你不应该使用npm安装,而是应该将安装的模块与发布的应用构建捆绑。

即使是在Fuku本地的PWA和Spectre世界中,JIT的弃用对于安全有什么影响呢?从安全角度来看,部署到Kotlin/Swift是一种狭隘的外包编译器修补责任的方式,你至少应该每个月构建一个,或者退出业务。从隐私角度来看,握手和启发式隐私保护对PWA和二进制应用程序同样重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接