我正在用 Perl 编写一个名为Kephra的程序员文本编辑器(是的另一个),它当然也是一个 CPAN 模块,并与Module::Install捆绑在一起。最近我看到Module::Build已经进入核心,所以如果我切换我可以减少依赖。有没有其他理由转行?
3 回答
我们在我们的组中使用Module::Build 。
主要原因是易于扩展。
Module::Build 允许您通过子类化在纯 Perl 中使用构建过程做更多事情。如果您想使用Module::Install做更多事情,您必须了解 Makefile 的工作原理,AFAIK。由于您大概已经了解 Perl,因此这可能是一个优势。
正如您所说,使用 Module::Build 消除了对外部make
程序的依赖,这可以看作是一件好事。
但是,我能想到的主要缺点是:
- 尽管 Module::Build 已经成为核心,但并不是每个人都会使用最新版本的 Perl。对于使用旧版本核心的用户,您将创建一个新的依赖项。
- 许多老手(不一定是 Perl 人)已经习惯了这种
perl Makemaker.PL; make; make install
范式,并且可能会因为拥有而被抛弃Build.PL
。希望这不是什么大问题。 - Module::Build 偶尔会在其功能发生变化时破坏我们的构建,因为文档没有涵盖我们正在使用的边缘情况。然后更改并记录了边缘情况,但我们必须重新编码我们的子类以使我们的构建再次工作(这发生在我们最近从 0.2808 升级到 0.3 时)。
尽管如此,我仍然推荐 Module::Build 只是为了可扩展性。如果这对您来说不是问题,那么您最好还是坚持使用 Module::Install。
嗯,Module::Build
是一个相当不错的模块,它应该是一个替代品ExtUtils::MakeMaker
,也就是说,将 Makefile.PL 替换为 Build.PL,生成一个 Build 而不是 Makefile。这也意味着“简单的事情应该保持简单,困难的事情应该成为可能”。
Module::Install
采用不同的方法并生成一个 Makefile。
另外,不要忘记不是每个人都运行最新版本的一切:-)
我不记得这些模块的任何比较,但我认为您可以从相应的 cpanratings 页面中找到一些Module::Build
东西Module::Install
。
之前已经在“我应该使用哪个框架来编写模块?”中对此进行了一些解释。
吐出反刍后,我决定使用Module::Build但显然可能有不同的答案!(尽管到目前为止我对 M::B 很满意)。