在 LM Studio (版本 0.4.13) 中使用官方提供的 JavaScript 运行环境插件 lmstudio/js-code-sandbox 时,开发者经常会遇到两个阻碍代码执行的底层问题。本文将直接拆解这两个问题的根源,并提供最彻底的解决路径。
问题一:ENOENT - 找不到 deno.exe
现象
即使在系统中全局安装了 Deno 且配置了环境变量,大模型在尝试运行 JavaScript 代码时依然会报错: Error calling run_javascript: spawn C:\Users<用户名>.cache\lm-studio.internal\utils\deno.exe ENOENT
原因
该插件的底层源码(src/toolsProvider.ts)中包含一个硬编码的 getDenoPath() 函数,它强制要求 Deno 必须位于 LM Studio 的特定内部缓存目录下,从而完全无视了系统的全局环境变量配置。
解决方案(物理覆盖法)
不要尝试修改源码,直接将 Deno 文件放入指定目录:
- 打开 PowerShell,运行
where.exe deno获取你系统中已安装的deno.exe路径。 - 复制该
deno.exe文件。 - 打开资源管理器,进入报错信息中提示的目录(注意替换为你的真实用户名):
C:\Users<用户名>.cache\lm-studio.internal\utils - 将
deno.exe粘贴到该目录下(与原有的node.exe等文件同级)。 - 重启 LM Studio。
问题二:网络请求被拒绝 (Requires net access)
现象
解决 Deno 运行环境后,当大模型尝试执行带有 fetch 等网络请求的代码(如查询 API、获取股价等)时,Deno 会拦截并报错: Requires net access to "xxx", run again with the --allow-net flag
原因与陷阱
Deno 默认是沙箱隔离的。插件在启动 Deno 进程时,显式注入了 --deny-net 参数。
最大的陷阱在于 :即使你找到了插件目录并修改了 src/toolsProvider.ts 源码,甚至在 VS Code 中进行了全局搜索替换,依然不会生效。因为 VS Code 默认会屏蔽隐藏文件夹(如 .lmstudio),而 LM Studio 实际运行的是经过 esbuild 实时编译并存放在该隐藏文件夹下的 JavaScript 最终执行文件。
解决方案(修改编译输出文件)
- 进入该插件的本地安装根目录。
- 手动在文件管理器(或强制 VS Code 显式展示隐藏目录)中打开
.lmstudio文件夹。 - 找到编译后的最终配置文件:
production.js(或类似命名的编译后 JS 文件)。 - 使用文本编辑器打开该文件,通过搜索(
Ctrl + F)定位到"deny-net"。 - 将
--deny-net修改为--allow-net(或者注释掉前者并显式添加后者)。 - 保存文件(
Ctrl + S)。 - 彻底关闭并重新启动 LM Studio 以清除内存缓存。
总结
完成上述两步后,lmstudio/js-code-sandbox 插件即可在本地环境中完全打通,大模型能够顺畅地编写并执行包含网络请求的 JavaScript 代码。