我可以在现代 Swift 的 JavaScriptCore 中加载 JS ES6+ 模块吗?

Posted

技术标签:

【中文标题】我可以在现代 Swift 的 JavaScriptCore 中加载 JS ES6+ 模块吗?【英文标题】:Can I load JS ES6+ modules in modern Swift’s JavaScriptCore? 【发布时间】:2020-02-13 18:20:26 【问题描述】:

使用 javascriptCore,我想将现代 Javascript 代码库的一部分集成到适用于 ios/ipados 13 的 Swift 5.x 程序中。JS 代码广泛使用 ES6+ 功能。例如:async/await、静态导入 (import * as something from “something.js”) 和动态导入 (`await loadedModule = import(“something.js”);

根据 2018 年的这篇文章,似乎导入语句当时没有正确实现:How to import modules in Swift's JavaScriptCore?

(我认为恢复该帖子不合适,因为此时发生了很多变化。)

从那时起,JavaScriptCore 是否集成了这些功能?据我了解,如果它们在 Safari 浏览器中工作,那么它们也应该在独立的 JavaScriptCore 中工作(或者假设是错误的)?我认为使用 babel 或 webpack 来转换我的代码并不实用。

如果可能的话,我如何从 Swift 中加载这种 JavaScript?

编辑:

我仍然得到 JS Exception: SyntaxError: Unexpected token '*'. import call expects exactly one argument.

当我尝试以下操作时:

import * as mod from "./mod.js";

【问题讨论】:

这能回答你的问题吗? How to import modules in Swift's JavaScriptCore? 【参考方案1】:

答案是“不”,但我可以使用 Babel 将具有静态导入/导出的文件转换为包含 requires 的代码,并在 Swift 中实现我自己的 require 版本来模拟我想要的。

【讨论】:

以上是关于我可以在现代 Swift 的 JavaScriptCore 中加载 JS ES6+ 模块吗?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 和 Javascript 集成

在现代站点中添加 SPFx webpart 时的 Javascript

在现代浏览器中,JavaScript 小书签是不是有任何安全限制?

如何有效地将 google-closure javascript 转换为现代 ES6?

即使在启用 Javascript 后 WKWebView 也无法正常工作 - Swift

第2282期向现代 Javascript 转型