скажем, у меня есть папка проекта, например:
mxn:lab axn$ tree .
.
├── lib
│ ├── a.lua
│ └── b.lua
└── main.lua
, где main.lua
:
require("lib.a")
, а в a.lua
я просто использую строку "b"
, пытаясь lua - найти файл с именем b.lua
в той же папке, что и a.lua
first:
require("b")
и b.lua
:
print('b loaded!')
, затем I запустите команду 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. Независимо от структуры, require("b")
в a.lua
всегда заставит lua искать b
в той же папке, что и a.lua
вначале.