【发布时间】:2020-07-17 13:44:09
【问题描述】:
假设我有一个项目文件夹,例如:
mxn:lab axn$ tree .
.
├── lib
│ ├── a.lua
│ └── b.lua
└── main.lua
main.lua:
require("lib.a")
而在a.lua 中我只是使用字符串"b",试图告诉lua - 首先在a.lua 的同一个文件夹中找到一个名为b.lua 的文件:
require("b")
和b.lua:
print('b loaded!')
然后我运行命令lua main.lua 并得到错误:
[Running] lua "/Users/axn/lab/main.lua"
lua: ./lib/a.lua:1: module 'b' not found:
no field package.preload['b']
no file './b.lua'
no file '/usr/local/share/lua/5.1/b.lua'
no file '/usr/local/share/lua/5.1/b/init.lua'
no file '/usr/local/lib/lua/5.1/b.lua'
no file '/usr/local/lib/lua/5.1/b/init.lua'
no file './b.so'
no file '/usr/local/lib/lua/5.1/b.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'require'
./lib/a.lua:1: in main chunk
[C]: in function 'require'
/Users/axn/lab/main.lua:1: in main chunk
[C]: ?
我知道像package.path = package.path..';'..'lib/?.lua' 这样的解决方案,但是如果结构更改为:
.
├── foo
│ └── lib
│ ├── a.lua
│ └── b.lua
└── main.lua
我不想再次修改 package.path。不管结构是什么,a.lua中的require("b")总是会让lua先在a.lua的同一个文件夹中搜索b。
【问题讨论】: