使用 require 和 dofile 编译 lua5.2 文件

我能将所有的 lua 文件编译为一个文件并从 C 语言中执行吗?在我的 lua 文件中,我使用 require 和 dofile 函数。如果我尝试使用 luac 进行编译,然后想要执行已编译的文件,那么它将无法找到已构建在编译文件中的模块。我认为使用 require 和 dofile 函数的 luac 编译器会像 JavaScript 编译器那样处理导入文件。简单地说,JavaScript 编译器将导入的文件添加到一个文件中。

在发布应用程序时,将 lua 脚本放在一个文件中是否是一个好的做法?因为我有几个带有 lua 脚本的目录,当我发布时,我必须将所有的 lua 文件都以可读形式与二进制文件一起发布。

点赞
用户1244588
用户1244588

luac 并不是一个打包工具,而只是一个编译器。只要输入的代码是有效的 Lua 代码,它就会将其编译成 Lua 字节码。

如果你希望所有的代码都在一个文件中,并且希望使用 require 命令去调用你的模块,你需要对你的源代码进行一些修改,这样 require 命令才知道在内存中如何找到这些模块。

只需要在所有 Lua 模块文件的末尾加上以下内容:

package.loaded["<yourmodnamehere>"] = yourmodreturnvalue

然后,在你的 Lua 初始化之后,直接使用 require 命令或 luaL_dofile 命令呼叫你合并后的 Lua 文件。

无论你用 dofile 做什么,重写你的代码以变成函数可能会更加容易。

2018-02-24 07:23:30