2017-02-01 85 views
3

在過去的兩週左右,我已經用這個項目工作了至少一千行代碼,所以如果我無法實現這個工作,我會非常惱火。爲什麼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已經正確地將系統註冊到系統中,您應該可以從任何地方要求。 –

回答

1

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

相關問題