Lua: module 'castl.runtime' not found

我是 Lua 的新手。我用 castl 将一个 JS 文件编译成了 lua 5.2 格式:

castl -o script.js

这个命令创建了一个名为 script.js.lua 的文件。这是我新的 lua 文件的第一行:

local _ENV = require("castl.runtime");

我尝试用 lua52 script.js.lua 运行这个文件,但是出了以下错误:

C:\Program Files\lua-5.2.4_Win64_bin\lua52.exe: script.js.lua:1: module 'castl.runtime' not found:
        no field package.preload['castl.runtime']
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\lua\castl\runtime.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\lua\castl\runtime\init.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime\init.lua'
        no file '.\castl\runtime.lua'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\loadall.dll'
        no file '.\castl\runtime.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl\runtime52.dll'
        no file '.\castl\runtime52.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\loadall.dll'
        no file '.\castl.dll'
        no file 'C:\Program Files\lua-5.2.4_Win64_bin\castl52.dll'
        no file '.\castl52.dll'
stack traceback:
        [C]: in function 'require'
        script.js.lua:1: in main chunk
        [C]: in ?

我错过了什么吗?我在使用 Windows 10。

点赞
用户2858170
用户2858170

回答你的问题:

我错过了什么?

你的问题在于你使用了函数 require,但你不知道这个函数的作用。因此,当它无法执行你期望的操作并且抛出错误时,你无法理解这些错误。

首先,请参考 Lua 手册: https://www.lua.org/manual/5.3/manual.html#pdf-require

你会找到:

require 使用存储在 package.path 中的路径搜索 Lua 加载器。如果失败,它将使用存储在 package.cpath 中的路径搜索 C 加载器。如果还是失败,则尝试使用一个全能的加载器(参见 package.searchers)。

以及https://www.lua.org/manual/5.3/manual.html#pdf-package.path

require 使用的路径搜索 Lua 加载器。

在启动时,Lua 将此变量初始化为环境变量 LUA_PATH_5_3 或环境变量 LUA_PATH 的值,或者使用在 luaconf.h 中定义的默认路径,如果这些环境变量未定义。环境变量的值中的任何 ;; 将被默认路径替换。

更多阅读: https://www.lua.org/pil/8.1.html

在任何网站上输入“Lua require”都会有很多的解决方案。

正如 hjpotter92 在他的评论中所说的,除非文件已经位于默认文件夹中,否则您必须告诉计算机搜索文件的位置。将文件的位置添加到您的 LUA_PATH 环境变量或在调用相应的 require 之前将其添加到 package.path 字符串中。

2017-03-20 10:45:10
用户360811
用户360811

我会留下一个答案在这里,因为我认为提供的答案对于不了解 Lua 生态系统的人并没有帮助。

为了解决 require("castl.runtime"),需要设置 LUA_PATH,在这种情况下,为了简单起见,假设 castl 发行版位于 /Users/me/castl,那么你可以:

export LUA_PATH="/Users/me/castl/lua/?.lua"

现在,如果你运行 Lua 脚本,它将被正确执行。

2019-06-29 14:45:32