Luarocks:用包含多个文件的包创建一个摇滚

时间:2016-01-23 18:10:34

标签: lua package luarocks

使用Luarocks,我已经按照Creating a rock上的教程进行了操作。但是,我在创建包含多个文件的包的摇滚时遇到了困难。当我的包分布在多个文件中时,我需要做什么不同的教程呢?

示例 - 一个文件

说我有以下文件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 makemake有效,但是当我转到另一个目录并运行`require'testrock``时,我收到以下错误:

/home/<username>/torch/install/share/lua/5.1/testrock.lua:7: attempt to call global 'require' (a nil value)

所以它抱怨require('foo')声明。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

module('testrock')的调用隐藏了所有全局变量,包括全局require函数。您可以在致电require之前致电module,或在致电local require = require之前创建本地别名(module),或使用Updated Example选项(module('testrock', package.seeall))。

将foo模块添加到rockspec中,以便它与testrock.lua文件一起安装,非常简单:

-- ...
build = {
   type = "builtin",
   modules = {
       testrock = "testrock.lua",
       foo = "foo.lua"
   }
}
-- ...

答案 1 :(得分:2)

解决方案随之意识到我不需要构建任何东西,因为我只使用.lua文件。因此,以下rockspec有效:

testrock.lua

这会将foo.lua/home/<username>/torch/install/share/lua/5.1/复制到ChildView = Backbone.Marionette.ItemView.extend({ send_message: function(){ this.model.collection.trigger('some-message'); } }) ParentCollectionView = Backbone.Marionette.CollectionView.extend({ // ON RENDER onRender: function(){ this.listenTo(this.collection, 'some-message', this.do_something); } // DO SOMETHING do_something: function(){ alert('did something'); } });