我正在使用npm包lua.vm.js在我的基于webkit节点的应用程序(nw)中执行一些预先存在的lua代码。
newtest.lua 文件包含:
local myFile, err = io.open('/tmp/file.txt')
print(myFile)
print(err)
io.input(myFile)
theContent = io.read('*all')
print(theContent)
在我的javascript代码中我正在做:
var fs = require('fs');
theFileContent = fs.readFileSync("./newtest.lua", "utf8");
var LuaVM = require('lua.vm.js');
var l = new LuaVM.Lua.State();
l.execute(theFileContent);
如果我只是执行:
lua newtest.lua
正如预期的那样,我得到了控制台上打印的' /tmp/file.txt' 的内容。
但是如果我从基于nw的应用程序运行相同的代码,我什么都得不到:输出控制台上没有任何内容,甚至全局变量 theContent 也没有设置为正确的值
myFile nil 且错误 /tmp/file.txt:没有此类文件或目录 < / p>
但文件就在那里。
我开始认为lua.vm.js执行的lua代码不允许执行操作。任何的想法?
更新 我试图运行一个简单的节点应用程序(从图片中删除nodewebkit)。 This is the example.js我正在运行
答案 0 :(得分:1)
我在https://github.com/kripken/lua.vm.js/issues/30回答:
lua.vm.js将IO虚拟化为内存虚拟文件系统(使用emscripten) 这是因为它主要针对的是真正的IO不存在的浏览器。
如果您在节点中运行,则可以使用节点文件功能:
local file = js.global:require"fs":open("/tmp/file.txt")