【问题标题】:directory structure of cpan modulecpan模块目录结构
【发布时间】:2014-02-18 03:45:45
【问题描述】:

我正在研究我想在 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

【问题讨论】:

标签: perl cpan


【解决方案1】:

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

分解差异:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2012-10-09
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2010-10-07
    • 2014-01-27
    相关资源
    最近更新 更多