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/,

Другие вопросы по тегам