Bin Joy's Blog

There is more than one way to do it...

使用 Dist::Zilla 快速发布模块

Perl 的 CPAN 可谓是个宝库,尤其在还没有 github 的日子里,对于每个 Perler 来说这里都称得上是“代码金矿”。

很多 Perler 在写过一些代码以后都可能想把自己的一些“小零碎”组织一下,装饰一番,发布到 CPAN 上。这样的好处一是分享自己的代码,同时也方便自己的使用。

但是“传统的”模块打包发布工具上手不是很容易,比如 ExtUtils::MakeMaker 或是 Module::Build, 相对讲操作不是很清晰,让一些没有深入的用户想发布个模块时有些望而却步,所以就有了 Dist::Zilla 这个好东西。

Dist::Zilla 可以处理创建、测试、打包、发布等一条龙服务,真的是新手很容易上手的好工具。

安装

Dist::Zilla 可以像其它模块一样很容易的安装,基本不会出现任何问题。比如可以使用 cpanm 安装:

1
cpanm install Dist::Zilla

Dist::Zilla 的大部分功能都是通过安装的一个 dzil 命令来完成的。所以安装完成后可以在命令行运行一下 dzil 这个命令,如果有这个命令,说明你已经安装好了:)

创建一个模块

既然安装好了工具,接下来我们就开始创建一个模块。如果打算在 CPAN 发布,创建模块前最好先确定一下模块的名称。因为 Perl 的模块是按照一定的命名规则来进行分类和组织的。所以要按照规则选择一个还没有被占用的名称。

比如和网络有关的都会选择放到 WWW 这个命名空间下。我就拿最近发布的 WWW::jsonip 模块来举例了。

当模块名称确定后,在命令行运行:

1
Dzil new WWW::jsonip

这时会在当前文件夹生成 WWW::jsonip 这样一个目录。目录结构如下:

1
2
3
4
5
WWW-jsonip/
├── dist.ini
└── lib
    └── WWW
        └── jsonip.pm

其中 dist.ini 是 Dist::Zilla 对这个模块的配置文件,其中纪录了关于模块的信息,包括作者信息、模块版本、还有使用的 Dist::Zilla 的哪些功能等,这部分我稍后再详细说。

你可以先打开这个文件先编辑一下作者信息和模块版本。

开发主要功能

lib 是模块的主文件夹,整个文件结构都是按照模块的命名来组织的。所以主要的功能都是在这里开发了。

测试

在项目的跟目录下创建一个名称为 t 的文件夹,然后把测试写在这里面就可以了。

如果运行测试,直接运行 dzil test 就会启动所有的测试,然后就可以查看哪些通过或是没有通过。

打包

如果开发也完成了,测试也通过了,接下来就是打包一下。

在根目录直接运行 dzil build,然后在跟目录下会生成包含了模块名称和版本号为文件名的 tar.gz 的文件,这样一个 Perl 模块的成品就热腾腾的出炉了。

发布

这时我们一般会在 dist.ini 文件中添加一些 Dist::Zilla 模块定制的几个配置方式来帮助我们引入上传的功能,基本上加入这几行配置就可以了:

1
2
3
4
[TestRelease]
[ConfirmRelease]
[UploadToCPAN]
[Clean]

然后运行 dzil release 即可。对于发布过程的确认,基本上一路 y 就可以了。

好了,小伙伴们赶紧去发布自己的模块到 CPAN 吧 :)

更多可以阅读:

  1. CPAN: https://metacpan.org/pod/Dist::Zilla
  2. 官方文档:http://dzil.org/index.html

Comments