QuickJS qjs解释器指南:12个最常用的命令行选项一次讲透

📅 2026/8/22 14:55:37
QuickJS qjs解释器指南:12个最常用的命令行选项一次讲透
QuickJS qjs解释器指南12个最常用的命令行选项一次讲透【免费下载链接】QuickJSQuickJS is a small and embeddable Javascript engine. QuickJS sources are copyright Fabrice Bellard and Charlie Gordon.项目地址: https://gitcode.com/gh_mirrors/quick/QuickJSQuickJS 是一款小巧、可嵌入的 JavaScript 引擎而qjs 解释器是它自带的命令行工具——一条命令就能运行 JS 脚本、调试内存、开启高精度数学。本指南面向新手把 12 个最常用的 qjs 命令行选项一次讲透让你从只会qjs hello.js进阶为熟练用户。3步上手编译并运行你的第一个脚本QuickJS 用 C 语言编写一条make即可完成编译git clone https://gitcode.com/gh_mirrors/quick/QuickJS cd QuickJS make ./qjs examples/hello.js看到Hello World输出说明你的 qjs 解释器已经就绪 。更多示例可参考 examples/hello.js、examples/fib_module.js编译规则见 Makefile。选项速查表12个qjs命令行选项一览#短选项长选项一句话说明1-h--help显示所有可用选项2-e--eval直接求值一段 JS 表达式3-i--interactive进入交互式 REPL 模式4-m--module以 ES6 模块方式加载--script则强制为脚本5-I--include在目标脚本之前预加载文件6—--std让非模块代码也能访问std/os7—--bignum启用 BigFloat / BigDecimal 高精度数学8—--unhandled-rejection打印未处理的 Promise 异常9-T--trace实时追踪每次内存分配10-d--dump运行结束后输出内存使用统计11—--memory-limit n将内存用量限制为 n 字节12—--stack-size n将调用栈大小限制为 n 字节所有选项的权威定义见 qjs.c 中的help()函数。下面逐个讲透 1.-h/--help快速查看所有选项记不住选项随时敲它qjs 会打印完整帮助并退出./qjs -h这是新手最该养成的习惯——遇到问题先--help。2.-e/--eval不写文件直接运行表达式不想建文件就想算个结果-e让你把表达式直接写在命令里./qjs -e console.log(6 * 7) # 输出: 42参数解析逻辑见 qjs.c它是临时验证代码片段的捷径。3.-i/--interactive进入交互式 REPL不带脚本启动 qjs 会自动进入交互模式-i则可以在运行完脚本后继续留在 REPL 里调试./qjs -i qjs 1 2 3REPL 支持自动补全其预编译实现由 repl.js 生成非常适合边写边试 。4.-m/--module正确运行 ES6 模块代码包含import/export的文件默认会被自动检测为模块但自动检测偶尔会失灵。此时用-m强制按 ES6 模块加载./qjs -m examples/fib_module.js反之--script选项可以强制按普通脚本加载。两者的处理逻辑见 qjs.c 的文件加载部分。5.-I/--include先加载公共代码再跑主脚本如果你有多个脚本共用一段工具函数不必重复 import——用-I把公共文件预加载进去./qjs -I myutils.js myscript.js最多可指定 32 个文件先于主脚本依次执行见 qjs.c。6.--std让std和os变成全局变量QuickJS 自带标准库模块std提供读写、定时器os提供进程与环境模块代码可以直接import。但在普通脚本里它们默认不可见加上--std就能全局使用./qjs --std -e print(os.argv0)其原理见 qjs.c解释器会偷偷执行一段导入代码把std和os挂到globalThis上。7.--bignum解锁 BigFloat / BigDecimal 高精度数学JavaScript 原生数字是 64 位浮点数算不了超大数。加上--bignum即可启用 QuickJS 扩展的 BigFloat二进制与 BigDecimal十进制类型./qjs --bignum examples/pi_bigfloat.js 50上面会高精度计算圆周率示例源码见 examples/pi_bigfloat.js。注意需要在编译时开启CONFIG_BIGNUM默认已开启见 Makefile。8.--unhandled-rejection揪出静默失踪的 Promise 错误这是一个实用的调试开关未处理的 Promise 拒绝默认被静默忽略加上该选项后 qjs 会把错误打印到标准错误输出./qjs --unhandled-rejection myscript.js # Possibly unhandled promise rejection: Error: xxx相关追踪器实现在 quickjs-libc.cREADME 也把它列为排查异步问题的重要工具。9.-T/--trace实时追踪每一次内存分配想看看引擎内部到底分配了多少内存、每次分配多大-T会在每次 malloc/free/realloc 时打印一行追踪日志./qjs -T -e console.log(1) # A 8 - H0000.8 # F H0000配合-d使用效果更佳是引擎开发者和内存问题排查利器 。10.-d/--dump运行结束后查看内存统计-d会在脚本运行结束时输出一份完整的内存使用报告对象数、字符串数、代码块数等./qjs -d tests/microbench.js统计由JS_ComputeMemoryUsage计算见 qjs.c评估脚本内存占用时非常直观。11.--memory-limit给脚本设定内存天花板嵌入场景中常需要防止脚本吃光内存。--memory-limit参数把内存用量上限设为 n 字节超出后分配会失败并报错./qjs --memory-limit 1048576 -e console.log(ok) # 限制 1MB该限制通过JS_SetMemoryLimit生效见 qjs.c是做沙箱、跑不可信代码时的安全护栏 ️。12.--stack-size限制调用栈防止无限递归深递归会耗尽调用栈。--stack-size把栈大小限制为 n 字节让溢出以正常的栈溢出错误呈现而不是直接崩溃./qjs --stack-size 1048576 -e function f(){return f()} f() # RangeError: call stack size exceeded与--memory-limit一样它通过JS_SetMaxStackSize设置见 qjs.c。进阶彩蛋两个你可能用得上的选项-q/--quit只实例化解释器就退出不运行任何代码。搭配-d可以基准测试引擎的启动耗时见 qjs.c。--qjscalc加载 QJSCalc 科学计算运行时相当于把 qjs 变成一个高精度计算器见 qjscalc.js。常见问题速答Q脚本里的import报unsupported keyword怎么办A加上-m以模块方式加载。Q--bignum提示未知选项A说明编译时没启用CONFIG_BIGNUM修改 Makefile 后重新make。Q-e和-i能一起用吗A可以先执行-e的表达式再进入交互模式。总结掌握这 12 个 qjs 解释器命令行选项你已经覆盖了日常开发的全部场景-e快速试算、-i交互调试、-m跑模块、--std用标准库、--bignum高精度计算、--unhandled-rejection排查异步错误、-T/-d/--memory-limit/--stack-size把控内存与栈。更多背景资料可参阅 README 和 Changelog动手试试吧【免费下载链接】QuickJSQuickJS is a small and embeddable Javascript engine. QuickJS sources are copyright Fabrice Bellard and Charlie Gordon.项目地址: https://gitcode.com/gh_mirrors/quick/QuickJS创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考