我想设置内部CPAN来分发我们的内部代码。

所以我一直在看CPAN::Mini作为推荐的here。但看起来还有其他选项,例如CPAN::SiteCPAN::DarkDist::Zilla ...

所有这些选择让我有点不知所措。人们最常使用/推荐什么?

我需要的是一种将内部模块推送到存储库的方法,可以从多台计算机进行访问。

最佳答案

快速的答案是,您要使用CPAN::Mini创建CPAN上当前所有内容的本地镜像,然后使用CPAN::Mini::Inject向其中添加您自己的发行版。

长答案是,它有助于理解CPAN镜像的构造方式。从广义上讲,它只是一个包含两个子目录的目录。

“模块”目录依次包含两个文件03modlist.data.gz,现代CPAN客户端会忽略其内容,但是有一些旧代码假定该文件存在,因此只需从现有镜像中复制它即可。另一个是02packages.details.txt.gz,我将在后面描述。

“作者”目录包含一个文件“01mailrc.txt.gz”,该文件是过去的另一个遗物,其内容可以忽略,因此只需从另一个镜像复制它,并包含“id”目录。这又包含子目录和发行版,其名称遵循一个模式。例如,我的PAUSE ID是DCANTRELL,我的发行版之一是XML-Tiny-2.06.tar.gz,因此该文件位于.../authors/id/D/DC/DCANTRELL/XML-Tiny-2.06中。 tar.gz。

02packages.details.txt.gz文件是将模块名称映射到发行版的索引,它必须是最新的镜像才能正常工作。它由几行标题行组成,必须存在且正确,然后是空白行,每个模块都应有一行。这些行是由空格分隔的三个字段:

  • 模块名称
  • 模块版本
  • 分发文件名

  • 例如
      XML::Tiny 2.06 D/DC/DCANTRELL/XML-Tiny-2.06.tar.gz
    

    (您可能还会看到.tgz,.zip和其他coupla)

    分布可能会出现在多行中,对于它包含的每个模块一次。例如
      XML::Tiny::DOM 1.1 D/DC/DCANTRELL/XML-Tiny-DOM-1.1.tar.gz
      XML::Tiny::DOM::Element 1.1 D/DC/DCANTRELL/XML-Tiny-DOM-1.1.tar.gz
    

    在普通的CPAN镜像中,可能有一个发行版的多个版本,以及一个模块的多个版本-例如,当前版本和一些较旧的版本,或者当前稳定版本和dev之一。索引文件包含最新的稳定版本。您可以告诉发行版的开发版本,因为它们的版本中带有下划线或包含字符串“-TRIAL”。

    因此,了解了所有这些之后,您就可以构造一个仅包含您的代码的CPAN-a-like。但是使用CPAN::Mini和CPAN::Mini::Inject将您的内容添加到“真实的” CPAN中的工作量较小。

    一旦创建了CPAN-a-like,就可以在HTTP上公开它,然后像往常一样使用任何客户端访问它,或者可以将其放在文件系统中,并配置CPAN客户端以使用文件访问它:///URL。

    关于perl - 内部CPAN-什么模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6648865/

    10-12 20:41