#javascript-engine #javascript #quickjs #interpreter #js #engine

quick-js-dtp

QuickJS JavaScript 引擎包装器(带改进的日期解析器)

2 个版本

0.4.2 2024 年 3 月 23 日
0.4.1 2023 年 2 月 5 日

#4 in #quickjs

MIT 许可证

2.5MB
80K SLoC

C 73K SLoC // 0.0% comments Rust 7.5K SLoC // 0.0% comments

quick-js-dtp

Crates.io docs.rs CI

QuickJS 的 Rust 包装器。

QuickJS 是 Fabrice Bellard 和 Charlie Gordon 开发的一个新的、小巧的 JavaScript 引擎。它速度快,支持完整的 ES2020 规范。

此 crate 允许您轻松地从 Rust 运行和集成 JavaScript 代码。

这是一个原始 quick-js crate 的分支,它包含一个功能齐全的日期解析器,能够解析如 Sat, 01-Jan-2000 00:00:00 PST 这样的日期。

快速入门

[dependencies]
quick-js-dtp = "0.4.1"
use quick_js::{Context, JsValue};

let context = Context::new().unwrap();

// Eval.

let value = context.eval("1 + 2").unwrap();
assert_eq!(value, JsValue::Int(3));

let value = context.eval_as::<String>(" var x = 100 + 250; x.toString() ").unwrap();
assert_eq!(&value, "350");

// Callbacks.

context.add_callback("myCallback", |a: i32, b: i32| a + b).unwrap();

context.eval(r#"
    // x will equal 30
    var x = myCallback(10, 20);
"#).unwrap();

可选功能

此 crate 支持以下功能

  • chrono:chrono 集成

    • 添加了一个 JsValue::Date 变体,可以将其(反)序列化为 JS Date
  • bigint:通过 num-bigint 支持任意精度整数

  • log:允许将 console.log 消息转发到 log crate。注意:必须使用 ContextBuilder::console(quick_js::console::LogConsole); 启用

  • patch-bigint:对于一些其他功能(如 bigint),会自动启用。您通常不需要手动启用此功能。

  • patch-dateparser 启用改进的 JS 日期解析器,支持额外的日期格式,如 Sat, 01-Jan-2000 00:00:00 PST

安装

默认情况下,quickjs 与 libquickjs-sys 库捆绑并提供自动编译,前提是你有适当的依赖项。

Windows 支持

Windows 只支持使用 MSYS2 环境和 x86_64-pc-windows-gnu 目标架构。

如果你已经安装了 MSYS2,并且 MSYS 的 bin 目录在你的路径中,你可以使用以下命令编译 quickjs:cargo build --target="x86_64-pc-windows-gnu"

目标也可以通过 cargo 配置文件CARGO_BUILD_TARGET 环境变量永久配置。

系统安装

要使用系统安装,而不是捆绑功能,首先安装所需的依赖项,然后编译并安装 quickjs。

# Debian/Ubuntu: apt-get install -y curl xz-utils build-essential gcc-multilib libclang-dev clang
mkdir quickjs 
curl -L https://bellard.org/quickjs/quickjs-2019-07-09.tar.xz | tar xJv -C quickjs --strip-components 1
cd quickjs
sudo make install

然后,你需要在 libquickjs-sys 库中禁用 bundled 功能,以强制使用系统版本。

依赖项