将实用程序模块添加到CPAN分发的正确方法是什么?

时间:2010-10-22 20:28:16

标签: perl cpan

我想将Crypt::SSLeayMakefile.PL中的一些内容分解为几个单独的类。这些类仅由Makefile.PL使用。因此,我确实想要他们

  1. 不要被PAUSE索引器索引
  2. 不作为模块的一部分安装。
  3. 我应该按inc {{1}}的方式将它们放入{{1}}吗?我还应该注意什么?

2 个答案:

答案 0 :(得分:4)

PAUSE在META.yml文件中查找no_index参数(规范:v1.4v2)。 ExtUtils::MakeMaker生成的默认META.yml包含

no_index:
    directory:
        - t
        - inc

但如果您愿意,可以添加更多数据

    package:
        - Some::Package::Used::For::Building::But::Not::To::Be::Installed
    file:
        - a-file/with/a/package/statement/that-should-be/ignored.pm

答案 1 :(得分:2)

这里确实有两个问题。一种方法是阻止PAUSE索引分发中的额外模块,使它们不会显示在 02packages 中,以及如何不欺骗用户安装它们。

PAUSE答案是正确修复,no_index内容和伪造 mldistwatch 的旧民间传说的组合。 PAUSE想要发现您的发行版中包含哪些软件包。它在与命名空间相同的行中查找package。如果它不在同一条线上,PAUSE会通过它。所以,你会在一些较旧的“隐藏”模块行中看到:

 package # separate lines get past PAUSE
      Some::Helper::Module;

如果您喜欢在幕后看,相关代码位于PAUSE::mldistwatch::filter_pms()中的PAUSE github repo

另一个问题是不安装发行版中的额外内容。索引与此无关。构建文件将大量内容移动到 blib (构建库)以准备安装。在那里结束的任何东西都会被安装。诀窍是不让构建器将助手模块放在那里。只要您不将它们放在发行版的顶层或 lib 目录中,这通常不是问题。