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

时间:2017-02-01 01:03:57

标签: lua require luvit

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

project tree

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

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

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

为什么当我需要一个不同的文件时,我无法检测到正常模块并且我的整个文件路径发生了变化?

修改:当我在WrapperTest中require 'main'时,它已成功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:

1 个答案:

答案 0 :(得分:1)

http是Luvit提供的'内置'库,反映了Node中的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