【问题标题】:Luarocks: Creating a rock from package with multiple filesLuarocks:从包含多个文件的包中创建岩石
【发布时间】:2016-04-30 05:57:23
【问题描述】:

使用 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') 声明。有什么建议吗?

【问题讨论】:

    标签: lua package luarocks


    【解决方案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"
       }
    }
    -- ...
    

    【讨论】:

      【解决方案2】:

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

      package = "testrock"
      version = "scm-1"
      
      source = ...
      description = ...
      dependencies = ...
      
      build = {
         type = "none",
         install = {
             lua = {
                 "testrock.lua",
                 "foo.lua"
             }
         }
      }
      

      这会将testrock.luafoo.lua 复制到/home/<username>/torch/install/share/lua/5.1/

      【讨论】:

        猜你喜欢
        • 2011-10-11
        • 2020-05-02
        • 2015-06-02
        • 1970-01-01
        • 1970-01-01
        • 2017-02-07
        • 1970-01-01
        • 2013-02-27
        • 2016-07-15
        相关资源
        最近更新 更多