2014-09-26 53 views
1

它看起来像大多数Perl模块声明它们对Makefile.PL中其他模块的依赖关系,然后CPAN使用它来安装这些依赖关系。为CPAN安装依赖关系的方法不适用于CPAN

但是现在我不是一个模块,而是一个终端用户应用程序,永远不会在CPAN上结束,我希望它能够轻松地在任何给定的机器上安装该应用程序的依赖关系。有没有Perl标准的方式来做到这一点?

+3

无论如何都要将它作为一个模块(可能称之为App :: ...)。然后可以使用任何您使用的构建系统(例如['Module :: Build'](https://metacpan.org/pod/Module::Build))或使用['cpanm'](https: //metacpan.org/pod/App::cpanminus)。构建系统会照顾到依赖关系,但也会使安装,测试等变得更加容易。 – Biffen 2014-09-26 05:09:00

回答

3

无论如何都要将它设置为模块,并将其放入App::… namespace。代码将存在于lib/App/**.pm库文件中,并且该脚本将只是一个薄包装器; perlfind就是一个很好的例子。使用CLI框架(例如MooseX::App)帮助将功能分解为模块,这使代码更易于测试和重用。如您所知,基于模块的分发直接​​使用metafile或间接使用构建系统声明其依赖关系,然后由您使用任何构建系统(例如Module::Build)打包或由用户使用任何构建系统安装工具(例如cpanm)。

+0

基于和扩展自[更早的评论](http://stackoverflow.com/q/26052341#comment-40813549 ),善意提出[Biffen](http://stackoverflow.com/u/418066)。 – daxim 2014-09-26 09:33:48

+0

谢谢。后续问题:Module :: Build似乎使用CPAN shell来安装依赖项。但有些不会安装它,因为并不是所有的测试都通过了。如果我自己打开shell,我可以强制安装,但是有没有办法配置Module :: Build来强制安装或不安装依赖项? – 2014-09-27 20:57:27