2017-02-01 9 views
3

В течение последних двух недель я работал с моим проектом с участием, по меньшей мере, тысячи строк кода, поэтому я был бы очень раздражен, если бы не смог заставить это работать ,Почему относительная траектория Lua настолько ужасна? (help w/require)

Я использую среду Luvit на сервере Ubuntu 16.04 Server VPS, используемом для размещения моего проекта. Это изображение моего текущего дерева файла

project tree

Я в настоящее время внутри (с помощью команды кд) папки WrapperTest и запустив файл main.lua. Для этого требуется файл сервера в сети/сокете.

По какой-то причине кажется, что Lua меняет путь к файлу каждый раз, когда я переключаю файлы. Это очень раздражает меня, так как в сети этот проект ДОЛЖЕН, и мои файлы даже не могут обнаружить встроенные модули.

С Luvit он предоставляет множество встроенных модулей, таких как coro-http, которые, как вы догадались, предоставляют поддержку HTTP для Lua. Почему так, как только мне нужен другой файл, я вдруг не могу обнаружить нормальные модули, и весь путь к файлу меняется. На самом деле это действительно подтачивает меня, и я бы хотел поддержать поддержку, поскольку этот проект стал кульминацией моего свободного времени. Я предоставлю больше информации, если кто-нибудь попросит об этом, поскольку я знаю, что я расплывчатый.

Edit: Когда я require 'main' в WrapperTest, успешно requiresWrapperTest/net/socket/server. Этот файл сервера зависит от «discordio.lua» в пределах WrapperTest/net/. Для «discordio.lua» требуется файл в в том же каталоге, который называется http-lib с указанием пути require "net/http-lib". В первой строке http-lib's требуется модуль под названием coro-http, который встроен в интерпретатор Лувита. Это не по какой-то странной причине, и я не могу понять, почему.

Стек трассировка (неофициальная, так как это ошибка 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''поверхности или что-то в этом роде. Также добавьте сообщения об ошибках/stacktrace, которые вы получаете. – greatwolf

+0

Done @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

Спасибо за единственный ответ. К сожалению, это действительно не работает. Я попробовал 'lit install''у модуль coro-http, и он сохранил много файлов в каталоге deps в моей папке-обертке. Затем я попробовал их, а затем потребовал, чтобы ошибка была возвращена, по существу, оставаясь, что coro-http не смог распознать свои зависимости, потому что я переместил папку deps, содержащую все в другом месте. Затем, чтобы завершить работу, весь мой проект начинает возвращать ошибки 'require', и в результате я фактически нахожусь на грани завершения моего проекта и выбрасываю почти 2000 строк кода в корзину. – Cryogenic

+0

Я просто сержусь, что lua (или luvit?) Не может реализовать реальные системы путей к файлу. это единственный крупный проект, над которым я работал некоторое время, и потерять его все в одно мгновение просто потому, что функция-функция очень сильно раздражает. Я также потерял почти всю свою уверенность в системах управления файлами lua, потому что это совершенно невероятно - почему не нужно просто открывать обычные папки с обычными вещами вместо того, чтобы слишком усложнять ситуацию. – Cryogenic

+0

@ '' требовательный'Криогенная Lua имеет очень упрощенную семантику, потому что базовый код ANSI C имеет ограниченное представление о том, что такое файловая система. Взгляните на документацию для 'require',' package.path' и 'package.loaders' в разделе [modules] (https://www.lua.org/manual/5.1/manual.html#5.3) , Мне непонятно, каким образом Luvit изменил это поведение или не изменил его, но вы должны его настроить, как вам нужно во время выполнения, если вы хорошо понимаете, как эти три вещи работают вместе. – Oka