美文网首页程序员Perl小推车
第九章 管理真实的程序(五) -分发包

第九章 管理真实的程序(五) -分发包

作者: 可以没名字吗 | 来源:发表于2016-03-27 17:38 被阅读200次

分发包

分发包就是由数据和模块组成的集合,它是发行、测试和安装的基本单位。遵循CPAN的约定可以最容易地实现分发包的配置、构建、打包、测试和安装。这些约定涵盖了如何打包发行、如何解决依赖问题、代码和文档应该安装到哪、如何验证分发包是否能正常工作、如何显示文档、如何管理存储库(repository)等等内容。成千上万的贡献者从数十万计的实际项目工作经验中总结出了这些指导内容,掌握了这些我们就站在了前人的肩膀上。

分发包要在不同的Perl版本、不同的硬件平台上进行测试,为了完成这些工作光上传就需要花费好几小时,如果测试发现了错误还得报告给作者---然而,只要你的分发包遵循了CPAN约定所有这些工作都可以自动完成!CPAN是Perl的秘密武器。

出于某些原因,你可能不希望以公共CPAN分发包的方式来公开发行你的代码,但这并不妨碍你利用CPAN工具和CPAN约定来管理你的代码(意思就是使用CPAN的工具并不强制你一定要公开自己的代码)。Perl社区有着强大的基础设施,要好好利用它。

分发包的属性

分发包除了有模块,还包含有一些其他的文件和目录:

  • Build.PL或Makefile.PL
    这是一个控制着配置、构建、测试、捆绑、安装等过程的程序
  • MANIFEST*
    上面记录着分发包的文件清单。有助于验证包的完整性。
  • META.yml或META.json
    里面记录了分发包的依赖信息和一些元数据。
  • README
    一些描述信息,可能包含分发包的作用、意图、版权和许可信息。
  • lib/
    模块的目录
  • t/
    测试文件的目录
  • Changes
    记录了分发包的重大变化。

一个好的分发包必须包含一个唯一的名称和版本号(通常来自包的主模块),任何你从CPAN下载的分发包都符合这个标准。公共服务CPANS会评估每一个上传包是否违反了标准约定。注意,CPANS并不涉及代码行为,它是为了让你的分发包适用于CPAN工具。

管理分发包的CPAN工具

Perl核心包含了几个用于管理分发包的工具:

  • CPAN.pm是正式的CPAN客户端。默认的,客户端会从公共库CPAN来安装发行包,当然你也可以配置成指定的库来代替或补充公共库(CPAN)。
  • ExtUtils::MakeMaker是个复杂但好用的工具,用于打包、构建、测试和安装分发包,它和Makefile.PL一起工作。
  • Test::More用于编写自动化测试,使用最广泛的基础模块。
  • TAP::Harness和prove用来运行测试,解析和报告测试结果。

另外还有一些非核心的模块也很有用:

  • App::cpanminus是一个无需配置的CPAN客户端,它可以处理最常见任务,使用很少的内存并且运行得很快。
  • App::perlbrew可以帮助你管理多个Perl版本。
  • CPAN::Mini和cpanmini命令允许你创建自己的CPAN镜像。你可以将自己的分发包放到私有镜像库里面,还可以进行版本管理。(有些情形下非常有用,比如针对自己公司指定哪些版本可用)
  • Dist::Zilla可自动执行一些分发包相关任务。利用Module::Build或 ExtUtils::MakeMaker进行工作,避免你直接使用它们。这里有相关的教程:http://dzil.org/
  • Test::Reporter报告分发包自动化测试的结果,给作者提供更详细的故障细节。
  • Carton和Pinto是2个新项目,它们旨在帮助你管理和安装代码的依赖。尚未被广泛使用,处在积极的开发中。
  • Module::Build功能和ExtUtils::MakeMaker一样,但停止维护了。

设计分发包

如何设计一个分发包?关于这个问题可以单独写一本书了(如《Writing Perl Modules for CPAN》),但也有一些设计原则可能会对你有帮助。可以从使用工具开始,如Module::Starter或Dist::Zilla。一开始就学习配置和规则可能有点难度,但是很有意义,这样就可以保证始终方向正确(这些知识永远不会过时)从而避免做乏味和繁重的无用功。

分发包应该遵循这些原则:

  • 每个分发包有单一而明确的目的。可以将若干个相关的发行包绑定到单一的包中;也可以将你的软件分解成不同的分发包以便管理各自的依赖关系和保持封装性。
  • 每个分发包包含单一的版本号,且版本号总是增长的。
  • 每个分发包提供良好的API,同一个自动化测试套件可以适用于不同版本的分发包。如果你使用本地CPAN镜像来安装你自己的分发包,那就可以重用CPAN的基础设施来测试分发包及依赖,这样就能方便地进行测试集成。
  • 分发包的测试是有用的、可重复的。CPAN基础设施提供了自动测试和报告功能,赶紧用起来。
  • 接口要是简单而有效的。要避免使用全局符号和默认导出:允许别人只使用他们想要的部分,不要污染他们的名字空间。

相关文章

网友评论

    本文标题:第九章 管理真实的程序(五) -分发包

    本文链接:https://www.haomeiwen.com/subject/uhrrlttx.html