Luarocks: Создание камня из пакета с несколькими файлами
Используя Luarocks, я следовал руководству по созданию камня. Тем не менее, я испытываю трудности при создании пакета пакета, который содержит несколько файлов. Что я должен делать иначе, чем учебник, когда мой пакет распределен по нескольким файлам?
Пример - один файл
Скажи, у меня есть следующий файл testrock.lua
:
module('testrock')
function add(a, b)
return a+b
end
И в testrock-scm-1.rockspec
package = "testrock"
version = "scm-1"
source = ...
description = ...
dependencies = ...
build = {
type = "builtin",
modules = {
testrock = "testrock.lua"
}
}
Тогда я бегу luarocks make
и это устанавливает testrock
очень хорошо (я могу перейти в другой каталог и запустить require 'testrock'
).
Пример - два файла
Тем не менее, скажем, я хочу добавить еще один файл foo.lua
:
function testrock.sub(a, b)
return a - b
end
Я добавляю следующее в конец testrock.lua
:
require('foo')
и беги luarocks make
, make
работает, но когда я иду в другой каталог и запускаю `require 'testrock``, я получаю следующую ошибку:
/home/<username>/torch/install/share/lua/5.1/testrock.lua:7: attempt to call global 'require' (a nil value)
и поэтому он жалуется на require('foo')
заявление. Любой совет?
2 ответа
Призыв к module('testrock')
скрывает все глобальные переменные, включая глобальные require
функция. Вы можете позвонить require
до звонка module
или создайте локальный псевдоним (local require = require
) до звонка module
или используйте package.seeall
вариант (module('testrock', package.seeall)
).
Добавление модуля foo в ваш rockpec, чтобы он был установлен вместе с вашим testrock.lua
файл, прост:
-- ...
build = {
type = "builtin",
modules = {
testrock = "testrock.lua",
foo = "foo.lua"
}
}
-- ...
Решение пришло с пониманием, что мне не нужно ничего строить, потому что я использую только файлы.lua. Таким образом, работает следующий rockpec:
package = "testrock"
version = "scm-1"
source = ...
description = ...
dependencies = ...
build = {
type = "none",
install = {
lua = {
"testrock.lua",
"foo.lua"
}
}
}
Это копирует testrock.lua
а также foo.lua
в /home/<username>/torch/install/share/lua/5.1/
,