如何在 Lua 中使用 require 访问 Luvit 的内置模块?

我正在运行一个 Luvit 环境,用于托管我的项目的 Ubuntu 16.04 服务器 VPS。这是我当前文件树的图像

project tree

我目前在 (通过 cd 命令) WrapperTest 文件夹中,并运行 main.lua 文件。这需要 net/socket 中的 server 文件。

感觉 Lua 每次切换文件时都会更改文件路径。在这个项目中,网络是必须的,我的文件甚至无法检测内置模块。

Luvit 提供了许多内置模块,比如 coro-http,为 Lua 提供 HTTP 支持。

为什么当我 require 不同的文件时,我无法检测到正常的模块,整个文件路径都会改变?

编辑:当我在 WrapperTest 中 require 'main' 时,它成功 requires WrapperTest/net/socket/server。这个 server 文件依赖于 WrapperTest/net/ 中的 'discordio.lua'。'discordio.lua' 需要同一目录下的一个名为 http-lib 的文件,并使用路径 require "net/http-lib"。在 http-lib 的第一行上,它需要一个名为 coro-http 的模块,该模块内置于 Luvit 的解释器中。这个不起作用,我找不到原因。

堆栈跟踪 (不是纯 Lua 的 Luvit 错误):

[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:
点赞
用户2505965
用户2505965

http 是在Luvit中提供的 '内建' 库,模仿了Node中的http库。

coro-http是一个辅助库,可通过Luvit包管理器lit从公共软件包库中进行安装。

$ lit install creationix/coro-http

litinstall命令将下载并安装库到名为deps的本地目录中。

Luvit提供了一个自定义的require,它 应该 在其搜索模式中包含deps(和递归向上的deps目录)。


如果其他方法都失败了,您可以尝试通过更改package.path字段手动调整搜索路径:

package.path = './deps/?.lua;' .. package.path
2017-02-01 10:17:55