我正在开发我的第一个 lua 包,我对如何命名我的 rockspec(s) 以及将它们放在哪里感到非常困惑。我看到的每个流行的 lua 包似乎都以不同的方式处理 rockspecs。这与 Ruby 非常不同,Ruby 中的每个 gem 都只有一个gemspec
. 这里有些例子:
- lua-cliargs:项目根目录中的单个rockspec,(例如
lua_cliargs-3.0-1.rockspec
) - ldoc:项目根目录中的单个rockspec,用
scm
而不是版本号命名(例如ldoc-scm-2.rockspec
) - lua-MessagePack:存储在顶级
rockspec/
目录中的多个以版本命名的rockspecs(例如lua-messagepack-0.1.0-1.rockspec
,...lua-messagepack-0.3.4-1.rockspec
),然后是一些在包版本之前插入的额外lua版本(例如lua-messagepack-lua53-0.3.6-1.rockspec
)。有时同一个包版本有两个rockspecs,一个包含lua53,一个不包含。 - luafilesystem : 多个以版本命名的 Rockspecs 存储在顶级
/rockspec
目录中(例如luafilesystem-1.3.0-1.rockspec
,...luafilesystem-1.6.1-1.rockspec
),然后是一些cvs
在包版本之前插入的包版本号而不是包版本号(例如luafilesystem-cvs-1.rockspec
,luafilesystem-cvs-2.rockspec
)。 - lpeg:根本没有rockspec
- luasocket:根目录中的一个rockspec,
scm
而不是包号(例如luasocket-scm-0.rockspec
),以及一个/rockspec
包含单个rockspec的目录,其中包含一个包号(例如luasocket-3.0rc2-1.rockspec
)
现在,这个问题解释了为什么会有一个“工作”的 rockspec 文件和一个单独的目录,里面装满了发布版本的 rockspec,但我仍然有几个问题:
- 什么是 rockspec 修订版?luarocks wiki 说软件包发布应该在 git 中用版本号标记,它给出的示例不包括 rockspec 修订。如果我的 rockspec 在 VCS 中,并且我标记了一个特定的提交,那么这是否有效地修复了该提交中包含的 rockspec 以及版本?Rockspec 的后续修订不可能在标记的提交中。
- 怎么能
lpeg
在 luarocks 上列出但缺少一个rockspec
? - luarocks wiki 说
scm
如果你希望你的 Rockspec 引用 HEAD,应该使用它来代替包版本号。但是由于HEAD
不断变化,并且rockspec必须列出所有文件,因此似乎需要不断增加rockspec的revision
数量scm
以跟上任何添加或删除的文件。人们可以通过完全不为rockspecs使用修订号来解决这个scm
问题,但我看到的那些修订号较低(例如ldoc-scm-2.rockspec
)。这是一个错误吗? - 上述任何示例是否被视为最佳实践?