【问题标题】:How to run Node JS code from npm inside of Swift如何在 Swift 中从 npm 运行 Node JS 代码
【发布时间】:2018-09-24 18:12:00
【问题描述】:

我正在制作一个 Cocoa 应用程序并想调用从npm 下载的 Node JS 包以从 Swift 运行。

我不知道这是否可能,但我在互联网上找不到任何东西。我可以从 Swift 调用 npm 包吗?

虽然它需要 Node 被运送或在运行该应用程序的用户的计算机上,但我不介意。但这能做到吗?

或者我必须在 Swift 中编写相同的 Node 代码吗?

【问题讨论】:

  • 你能提供更多关于你想要做什么的信息吗?我不明白你为什么要在 swift 中运行节点,如果你想运行 javascript,你可以像这里描述的那样做 stackoverflow.com/questions/37434560/…
  • Node 中有一些很棒的模块在 Swift 中不存在或者必须完全重写。现在,如果我想使用github.com/mixn/carbon-now-cli 制作一个可可应用程序,它的作用类似于桌面应用程序中的carbon.now.sh。我可以用 Electron 来做这件事,但它会带来巨大的膨胀,所以我想用 Swift 来做 :)

标签: javascript node.js swift cocoa npm


【解决方案1】:

这是一个很好的问题。我将尝试为您概述这些不同系统的工作原理以及理论上但相当痛苦的解决方案。 Swift 在移动端运行,并以更底层的方式管理其资源。

另一方面,Javascript 是一种通用语言,需要“理解”javascript 的虚拟机 (VM) 才能嵌入到您的目标系统中。值得庆幸的是,iOS 已经通过javascriptcore 接口做到了这一点。有了它,您可以加载一个 Javascript 包并从中评估任何函数。

理论上,您的建议会像这样工作:

  1. 找到您要运行的软件包的捆绑版本

  2. 使用 JavaScriptCore 接口将其加载到 javascript VM 上

  3. 评估包的功能

查看this great guide

这种方法的最大警告是 npm 包的平台特定调用(例如 Node.js 的 fs 包不存在)。

如果是这种情况,那么您应该使用远程服务来运行您所建议的代码。

【讨论】:

  • 终于有人用最简单的方式回答了。谢谢科斯塔斯 :)
【解决方案2】:

您可以做的是,您可以通过服务器上的节点和 npm 创建一个套接字或 Web 应用程序,它们可以通过一个 rest url 进行通信。

通过向该网址发出请求,您可以访问它。

但这当然并不意味着您可以将 npm 包嵌入到您的 swift 代码中。这意味着您可以将其用作服务。

【讨论】:

    【解决方案3】:

    我不知道swift是如何工作的,但是如果你可以包含一个js文件,你可以只包含该文件。使文件看起来像一个简单的 javascript 文件。不是nodejs文件。您可以使用 browserify 它将从节点模块为浏览器生成单个 js 文件。有这个东西:https://cocoapods.org/pods/SwiftJavascriptBridge甚至更多https://google.com/?q=Swift+javascript

    这篇文章看起来不错: http://www.dbotha.com/2014/11/19/using-javascript-core-for-game-scripting-on-ios/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-23
      • 2017-05-02
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多