为什么 lua require 不会搜索当前目录?

假设我有一个文件夹里有两个文件test.luam.lua,在test.lua中写入:

require("m")

然后我运行这个文件,但是它会抛出一个错误:

lua: /Users/xx/works/scripts/test.lua:43: module 'm' not found:
    no field package.preload['m']
    no file '/usr/local/share/lua/5.3/m.lua'
    no file '/usr/local/share/lua/5.3/m/init.lua'
    no file '/usr/local/lib/lua/5.3/m.lua'
    no file '/usr/local/lib/lua/5.3/m/init.lua'
    no file './m.lua'
    no file './m/init.lua'
    no file '/usr/local/lib/lua/5.3/m.so'
    no file '/usr/local/lib/lua/5.3/loadall.so'
    no file './m.so'

正如你所看到的,no file './m.lua'这一行出现了,但事实并非如此。./m.lua文件是存在的,文件权限也没问题。如果我硬编码了路径:

package.path = package.path..';'..'/Users/xx/works/scripts/?.lua'
require('m')

它会按预期工作。那我应该怎么做,让 lua 在需要模块时先搜索当前目录 (就像 python 的 import 一样)?

点赞
用户10969235
用户10969235

当前目录是启动 lua 的目录。

在你的例子中缺少命令行,如果你使用 lua test.lua,它应该可以运行,如果你使用 lua works/scripts/test.lua,它将无法运行。

2020-04-05 11:00:25