为什么Lua的相对路径系统如此糟糕? (需要帮助)
在过去的两周左右,我已经用这个项目工作了至少一千行代码,所以如果我无法实现这个工作,我会非常恼火。为什么Lua的相对路径系统如此糟糕? (需要帮助)
我一直在Ubuntu 16.04服务器上运行Luvit环境用于托管我的项目。这是我目前的文件树
我现在里面(通过cd命令)的WrapperTest文件夹,然后运行该文件main.lua的图像。这需要net/socket内的服务器文件。
出于某种原因,感觉就像Lua每次切换文件时都要更改文件路径。这很烦人,因为在这个项目中,网络是MUST,我的文件甚至无法检测到内置模块。
有了Luvit,它提供了许多内置模块,如coro-http
,你猜对了,它提供了对Lua的HTTP支持。为什么一旦我需要不同的文件,我突然无法检测到正常的模块,并且我的整个文件路径都发生了变化。这真的让我很烦,因为这个项目是我很多空闲时间的顶点,所以我很乐意支持。如果有人提出要求,我会提供更多信息,因为我知道我在这里很模糊。
编辑:当我在require 'main'
WrapperTest,它成功地requires
WrapperTest/net/socket/server
。此服务器文件取决于WrapperTest/net/
中的'discordio.lua'。 'discordio.lua'需要同一目录中的文件,其名称为http-lib
,路径require "net/http-lib"
。在http-lib's
的第一行上,它需要一个名为coro-http
的模块,该模块内置于Luvit的解释器中。这失败了一些奇怪的原因,我不明白为什么。
堆栈跟踪(非官方的,因为它是一个Luvit错误,不是纯粹的LUA):
[string "bundle:deps/require.lua"]:278:
No such module 'net/discordio' in '/usr/local/WrapperTest/net/socket/server.lua'
./net/http-lib.lua:1: module 'coro-http' not found:
http
是Luvit提供的镜像在节点上找到了http
库“内置”库。
coro-http
是一个辅助库,可以使用来自公共包资源库的Luvit软件包管理器lit
进行安装。
$ lit install creationix/coro-http
的lit
install
命令将下载和安装库来叫deps
本地目录。
Luvit提供了一个定制require
,其应包括deps
(并递归地上升deps
目录)在其搜索模式。
如果一切都失败了,你可以尝试手动改变package.path
场控制您的搜索路径:
package.path = './deps/?.lua;' .. package.path
谢谢你唯一的答案。不幸的是,它确实没有工作。我试着'点亮安装'coro-http模块,它将许多文件保存到包装文件夹中的deps目录中。然后我试图要求那些,然后另一个要求错误返回基本上停留在coro-http无法识别其依赖项,因为我移动了包含其他地方的所有文件夹。 接下来,我的整个项目开始返回'require'错误,因此我实际上正在结束我的项目并将近2000行代码投入垃圾箱。 – Cryogenic
我只是生气,卢阿(或luvit?)不能实现实际的文件路径系统。这是我一段时间以来唯一一个主要的项目,只是因为需求函数的渲染非常恼人,所以一闪而过,这也让我失去了我对lua文件管理系统的几乎所有信心,因为这完全不可思议 - 为什么不能只需要用普通的东西打开常规文件夹就可以了,而不是让事情过于复杂。 – Cryogenic
@Cryogenic Lua的'require'具有非常简单的语义,因为底层的ANSI C代码对文件系统有什么限制。在[modules section](https://www.lua.org/manual/5.1/manual.html#5.3)中查看'require','package.path'和'package.loaders'的文档, 。我不清楚Luvit是否已经修改了这种行为,但是如果您能够在运行时对其进行调整,那么您应该能够对其进行调整,前提是您对这三件事情的一致性有了很好的理解。 – Oka
为了减少模糊性和更好的说明这一点,可你也是一个简单的例子,添加的问题?例如。当你需要'xyz'时,它不会'需要'different_path.some_module''之后,或类似的东西。另外添加你得到的错误消息/堆栈跟踪。 – greatwolf
完成@greatwolf – Cryogenic
如果'coro-http'是Luvit解释器的一部分,那么这不是一个“相对路径问题”。这是你的Luvit翻译的问题。如果Luvit已经正确地将系统注册到系统中,您应该可以从任何地方要求。 –