Luarocks:从包含多个文件的包中创建一个岩石
Luarocks: Creating a rock from package with multiple files
使用 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 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')
声明。有什么建议吗?
随附的解决方案意识到我不需要构建任何东西,因为我只使用 .lua 文件。因此,以下 rockspec 有效:
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/
。
对module('testrock')
的调用隐藏了所有全局变量,包括全局require
函数。您可以在调用 module
之前调用 require
,或者在调用 module
之前创建本地别名 (local require = require
),或者使用 package.seeall
选项(module('testrock', package.seeall)
).
将 foo 模块添加到您的 rockspec,以便它与您的 testrock.lua
文件一起安装,非常简单:
-- ...
build = {
type = "builtin",
modules = {
testrock = "testrock.lua",
foo = "foo.lua"
}
}
-- ...
使用 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 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')
声明。有什么建议吗?
随附的解决方案意识到我不需要构建任何东西,因为我只使用 .lua 文件。因此,以下 rockspec 有效:
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/
。
对module('testrock')
的调用隐藏了所有全局变量,包括全局require
函数。您可以在调用 module
之前调用 require
,或者在调用 module
之前创建本地别名 (local require = require
),或者使用 package.seeall
选项(module('testrock', package.seeall)
).
将 foo 模块添加到您的 rockspec,以便它与您的 testrock.lua
文件一起安装,非常简单:
-- ...
build = {
type = "builtin",
modules = {
testrock = "testrock.lua",
foo = "foo.lua"
}
}
-- ...