cpan模块的目录结构

时间:2014-01-27 10:36:53

标签: perl cpan

我正在研究我想在CPAN中提交的perl模块。 但是我对模块的目录结构有一个小问题。

根据perlmonk article,模块代码目录结构应如下所示:

    Foo-Bar-0.01/Bar.pm
    Foo-Bar-0.01/Makefile.PL
    Foo-Bar-0.01/MANIFEST
    Foo-Bar-0.01/Changes
    Foo-Bar-0.01/test.pl
    Foo-Bar-0.01/README

但是当我使用该命令时,结构生成如下

    h2xs -AX Foo::Bar

    Writing Foo-Bar/lib/Foo/Bar.pm
    Writing Foo-Bar/Makefile.PL
    Writing Foo-Bar/README0
    Writing Foo-Bar/t/Foo-Bar.t
    Writing Foo-Bar/Changes
    Writing Foo-Bar/MANIFEST

1 个答案:

答案 0 :(得分:2)

有问题的文章提倡使用相当旧的模块结构。它当然可以使用,但它在良好的测试,构建和分发实践方面已经失去了很多进步。

打破分歧:

  • 模块已从顶层移动到lib /目录。这统一了模块“存在”的位置(即,您处理代码并创建要测试并最终分发的基线模块的位置)。它还可以更轻松地设置您需要的任何层次结构(例如子类或辅助模块);较新的设置只会选择这些。较旧的可能但是我不熟悉它是否是。
  • 当运行“make”时,
  • Makefile.PL将在较新的设置中运行。创建一个名为“blib”的库,* b * uild * lib * rary - 这是代码构建用于实际测试的地方。它几乎是lib /的副本,除非你有XS代码,在这种情况下,这是编译的XS代码最终的地方。这使得构建和测试代码的过程更加简单;如果更新lib /中的文件,Makefile会在尝试测试之前将文件重建为blib。
  • t /目录替换test.pl; “make test”将执行t /中的所有* .t文件,而不是必须将所有测试放在test.pl中。这使得编写测试变得容易得多,因为您可以确保在每次测试开始时都具有一致的状态。
  • MANIFEST和两者中的更改相同:MANIFEST(由“make manifest”构建)用于确定在打包模块以进行上载时应该重新分发构建库中的哪些文件,并用于验证包是否为下载并打开包装进行构建时完成。更改只是一个更改日志,您可以手动编辑以记录每个分布式版本中所做的更改。

根据您对问题的评论中的建议,使用Module :: Starter或Dist :: Zilla(请注意,Dist :: Zilla是基于Moose的,并将安装 lot of prereqs)以更现代的方式构建模块的更好方法。在这两个版本中,h2xs版本更接近到现代包装标准,但你最好使用推荐的软件包启动器选项之一(可能是Module :: Build,它使用Build Perl脚本)而不是Makefile来构建代码。)