Lua中是否有更好的方式以相对路径要求文件?

62

我的目录结构如下:

|-- ball.lua
|-- entity.lua
|-- test
    `-- ball_test.lua
我正在test/ball_test.lua中使用以下代码,从父目录中要求ball.lua:
package.path = package.path .. ";../entity.lua"
require("entity")
package.path = package.path .. ";../ball.lua"
require("ball")

entity.lua是ball.lua的依赖项。所以我需要先require("entity"),否则我会得到一个模块'entity.lua'未找到的错误。这似乎是一种hack,有没有更好的方法来做到这一点呢?


需要球模块,请引用entity.lua,所以您只需require 'ball'。 - Łukasz Gruner
3
@Lukasz - ball需要entity.lua文件。我出错了,因为当它在测试子目录中执行时,require找不到entity.lua文件。抱歉我在问题中没有表述清楚。 - Seth Reno
1个回答

90
package.path = package.path .. ";../?.lua"

都可以用。


11
我会将这句话改为 package.path = ";../?.lua" .. package.path,这样我就不会因为未知模块而覆盖本地模块。 - Stuart P. Bentley
26
我猜你的意思是“package.path = "../?.lua;" .. package.path”(路径分隔符需要移动)。否则,这是一个好主意。 - Todd
7
如果有人想知道如何为C扩展模块设置路径,你需要修改 package.cpath 而不是 package.path;否则操作类似。 - wakjah
3
如果您使用NGINX LUA模块,这是一个不好的想法。package.path是全局的。每个请求都会执行此代码并无限连接。最终,它将爆炸。我在PROD中对此代码有不好的经验。请改用lua_package_path。还要阅读此文章https://medium.com/@fabricebaumann/how-we-reduced-the-cpu-usage-of-our-lua-code-cc30d001a328lua_package_path ";;/your/folder/lua/?.lua" ;_;;_是指向默认包lua目录的符号链接。不要删除它。 - uwevil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接