为什么Lua的相对路径系统如此糟糕? (需要帮助)

问题描述:

在过去的两周左右,我已经用这个项目工作了至少一千行代码,所以如果我无法实现这个工作,我会非常恼火。为什么Lua的相对路径系统如此糟糕? (需要帮助)

我一直在Ubuntu 16.04服务器上运行Luvit环境用于托管我的项目。这是我目前的文件树

project tree

我现在里面(通过cd命令)的WrapperTest文件夹,然后运行该文件main.lua的图像。这需要net/socket内的服务器文件。

出于某种原因,感觉就像Lua每次切换文件时都要更改文件路径。这很烦人,因为在这个项目中,网络是MUST,我的文件甚至无法检测到内置模块。

有了Luvit,它提供了许多内置模块,如coro-http,你猜对了,它提供了对Lua的HTTP支持。为什么一旦我需要不同的文件,我突然无法检测到正常的模块,并且我的整个文件路径都发生了变化。这真的让我很烦,因为这个项目是我很多空闲时间的顶点,所以我很乐意支持。如果有人提出要求,我会提供更多信息,因为我知道我在这里很模糊。

编辑:当我在require 'main' WrapperTest,它成功地requiresWrapperTest/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: 
+0

为了减少模糊性和更好的说明这一点,可你也是一个简单的例子,添加的问题?例如。当你需要'xyz'时,它不会'需要'different_path.some_module''之后,或类似的东西。另外添加你得到的错误消息/堆栈跟踪。 – greatwolf

+0

完成@greatwolf – Cryogenic

+0

如果'coro-http'是Luvit解释器的一部分,那么这不是一个“相对路径问题”。这是你的Luvit翻译的问题。如果Luvit已经正确地将系统注册到系统中,您应该可以从任何地方要求。 –

http是Luvit提供的镜像在节点上找到了http“内置”库。

coro-http是一个辅助库,可以使用来自公共包资源库的Luvit软件包管理器lit进行安装。

$ lit install creationix/coro-http 

litinstall命令将下载和安装库来叫deps本地目录。

Luvit提供了一个定制require,其包括deps(并递归地上升deps目录)在其搜索模式。


如果一切都失败了,你可以尝试手动改变package.path场控制您的搜索路径:

package.path = './deps/?.lua;' .. package.path 
+0

谢谢你唯一的答案。不幸的是,它确实没有工作。我试着'点亮安装'coro-http模块,它将许多文件保存到包装文件夹中的deps目录中。然后我试图要求那些,然后另一个要求错误返回基本上停留在coro-http无法识别其依赖项,因为我移动了包含其他地方的所有文件夹。 接下来,我的整个项目开始返回'require'错误,因此我实际上正在结束我的项目并将近2000行代码投入垃圾箱。 – Cryogenic

+0

我只是生气,卢阿(或luvit?)不能实现实际的文件路径系统。这是我一段时间以来唯一一个主要的项目,只是因为需求函数的渲染非常恼人,所以一闪而过,这也让我失去了我对lua文件管理系统的几乎所有信心,因为这完全不可思议 - 为什么不能只需要用普通的东西打开常规文件夹就可以了,而不是让事情过于复杂。 – Cryogenic

+0

@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