当前位置:  开发笔记 > 编程语言 > 正文

我应该用哪个框架来编写模块?

如何解决《我应该用哪个框架来编写模块?》经验,为你挑选了5个好方法。

编写模块的最佳框架是什么 - ExtUtils :: MakeMaker(h2xs)或Module :: Build?



1> Schwern..:

注意此建议已过期. Module :: Build已从Perl核心中删除,但仍作为CPAN模块使用.优点和缺点仍然存在,我对MakeMaker的看法仍然有效.


作为ExtUtils :: MakeMaker的前维护者,我喜欢推荐Module :: Build,因为MakeMaker是一个恐怖秀.Module :: Build组合得更好.但那些不是你的担忧,我会向你提出"最不麻烦"的答案.

执行摘要:

因为Module :: Build支持并非100%通过Perl实现,所以从MakeMaker开始.如果要进行任何自定义,请切换到Module :: Build.由于它们的基本布局,选项和界面几乎完全相同,因此这将是无痛的.看起来很诱人,避免使用Module :: Install.

幸运的是,Module :: Build可以模拟MakeMaker,它可以帮助一些人,但如果您要进行任何自定义,则无法提供帮助.请参阅Module :: Build :: Compat.

对于使用Module :: Build的CPAN版本很好.现在CPAN上有足够的Module :: Build内容,每个人都已经处理过它已经被引导过了.

最后,新configure_requires选项让CPAN shell知道在开始构建模块之前安装Module :: Build.不幸的是,只有最新的CPAN shell知道configure_requires.

哦,无论你做什么都不使用h2xs(除非你正在编写XS代码......甚至考虑一下).

MakeMaker优点:

附带Perl并由Perl核心使用(因此它被积极维护并将永远保持)

一切都知道如何处理Makefile.PL.

大多数模块创作文档将涵盖MakeMaker.

使用make(知道make的人可以调试和修补构建过程)

MakeMaker缺点:

需要make(想想Windows)

很难定制

更难定制和制作跨平台

出现问题时很难调试(除非你了解make)

模块::构建优点:

更容易定制/子类

纯Perl

更容易调试(它是Perl)

可以通过多种方式模拟MakeMaker

CPAN shell将为您安装Module :: Build

模块::构建缺点:

Module :: Build维护者(实际上所有Perl Toolchain Gang)都讨厌它

旧版本的CPAN客户端(包括CPANPLUS)对Module :: Build一无所知.

Module :: Install Pros:

光滑的界面

捆绑自己,你有一个已知的版本

一切都知道如何处理Makefile.PL

模块::安装缺点:

需要制作

始终使用捆绑版本,易受外部破坏

很难在其界面之外进行自定义

与MakeMaker的胆量相混淆,因此新的MakeMaker版本最终会破坏它.

不知道如何使用v2元规范生成META文件(越来越多的新工具出现问题)


这个建议很老了,现在已经过时了.除非需要,否则Perl Toolchain Gang不建议使用Module :: Build.http://www.dagolden.com/index.php/2140/paying-respect-to-modulebuild/
@tchrist你应该知道安装prereqs的责任落在你的CPAN shell上,而不是Module :: Build和MakeMaker.您还应该知道这不是任何这些事情的错误队列.由于您无法找到它,这里是DBM :: Deep的:https://rt.cpan.org/Public/Dist/Display.html?Name = DBM-Deep

2> Dave Rolsky..:

这里有两个问题.

首先,永远不要使用h2xs.这是旧的过时的肮脏,虽然我想如果你真的试图把头文件变成XS代码,它可能是有用的(从来没有自己做过).

2011更新:我强烈建议您看看Dist :: Zilla,特别是如果您认为您将维护多个模块.

要创建新模块,请使用Module :: Starter.它工作得很好,并有一些很好的插件来自定义输出.

其次,你问的是你应该使用什么构建系统.三个竞争者是ExtUtils :: MakeMaker(EUMM),Module :: Build(MB)和Module :: Install(MI).

EUMM是一个令人讨厌的令人讨厌的工作,但是它可以工作,如果你根本没有自定义你的构建过程,那就行得很好.

MB是新的孩子,它有批评者.最重要的是,如果你想要大量定制你的安装和构建过程,很可能使用MB做到这一点(并以跨平台的方式).使用EUMM真的不可能.

最后,MI基本上是EUMM之上的声明性包装器.它还与您的发行版一起打包,试图解决用户尝试使用旧工具链模块安装模块的问题."自我包装"技巧的缺点是,如果MI本身存在错误,您必须重新发布所有模块才能修复它.

就定制而言,有一些用于MI的插件,但是如果你想要超越它们,你将会回到处理Makefiles并在十几个+平台上构建工具的问题,所以它真的无济于事你在这个领域太多了.



3> brian d foy..:

我刚刚将Distribution :: Cooker上传到CPAN.这是我用来制作新发行版的内容.关于它的好处是你的发行版可以是你喜欢的任何东西:你只是在烹饪一些模板.我不在乎是否有人使用它.对我来说,这很简单,技术含量低,不会造成额外的问题.

您可以从Module :: Starter开始制作入门模板,然后添加自己的样板和最喜欢的做事方式.您不仅可以在每个文件中选择任何内容,还可以在发行版中显示哪些文件.当您弄清楚自己喜欢做什么时,只需更新自己的模板即可.

对于Makemaker和Module :: Build,未来是Module :: Build.只有我们老家伙再使用Makemaker了.:)有两种方法可以同时使用(或假装使用两者).查看Module :: Build,Module :: Build :: Compat和Module :: Install文档.Module :: Build被Perl的标准库所取代,它的未来不确定.它回到Makemaker作为构建系统.

虽然这只是一个副作用的答案,但尝试使用每个只是为了获得每个的经验.



4> Schwern..:

您还可以查看Dist-Zilla,它是一种新的仅作者创建分布的工具.因为它只是帮助构建发行版,它不附带您的代码或进行任何安装,它可以做很多强大的东西.



5> 小智..:

关于Module :: Build兼容性的唯一问题是当用户尝试安装模块而不更新他们的CPAN客户端时(CPAN.pm或CPANPLUS.pm)如果他们从CPAN安装模块,他们就可以轻松升级他们的客户端从同一面镜子.

如果您不想在构建过程中执行任何复杂操作,请确保:使用EUMM.但是如果在不同的目标平台上存在构建问题,则可能最终出现在Makefile中,这在make的每个变体上都是不同的.

Module :: Build为您提供了许多功能(如果您扩展它,您可以想到任何东西)并且都是perl,因此您永远不会最终调试makefile.Module :: Install为您提供了功能,但您必须捆绑它,最终所有内容都会通过'make'运行.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有