如何将QuickJS的JS模块转成C并作为内置模块使用?
将JS模块编译为QuickJS内置模块的步骤
1. 用qjsc转换JS模块为C/目标文件
执行对应命令,把你的myModule.js转为C源码或目标文件:
- 生成C源码文件:
qjsc -c -o myModule.c myModule.js
参数说明:-c表示仅生成C代码,-o指定输出文件名
- 直接生成目标文件(
.o):
qjsc -c -o myModule.o myModule.js
2. 修改QuickJS编译配置
要让模块像std/os一样内置,需调整QuickJS源码目录的配置:
- 编辑
Makefile:在OBJS变量中追加你的myModule.o(若已生成目标文件),或在源码列表中加入myModule.c,确保编译时包含该模块。 - 注册模块:打开
quickjs-libc.c,仿照js_init_module_std/js_init_module_os的写法,添加你的模块注册逻辑:
JSModuleDef *js_init_module_myModule(JSContext *ctx, const char *module_name) { JSModuleDef *m; m = JS_NewCModule(ctx, module_name, myModule_init); if (!m) return NULL; JS_AddModuleExport(ctx, m, "default"); // 模块有其他导出项时,在此添加对应JS_AddModuleExport调用 return m; }
接着在js_init_std函数中调用js_init_module_myModule(ctx, "myModule");,确保引擎启动时自动注册模块。
3. 重新编译QuickJS
回到QuickJS源码目录,执行编译命令:
make
编译完成后,新的qjs可执行文件就内置了myModule,直接用import myModule from "myModule";即可导入使用,无需额外路径。
内容的提问来源于stack exchange,提问作者Cemal Gönültaş
相关产品推荐
相关产品推荐

