cpanfile-faq

cpanfile-faq(3pm)     User Contributed Perl Documentation    cpanfile-faq(3pm)

NAME
       cpanfile-faq - cpanfile FAQ

QUESTIONS
   Does cpanfile replace Makefile.PL/Build.PL or META.yml/json?
       No, it doesn't. "cpanfile" is a simpler way to declare CPAN
       dependencies, mainly for your application rather than CPAN
       distributions.

       However, while CPAN distributions do not need to switch to "cpanfile",
       you can certainly manage the dependencies in "cpanfile", then export
       them into "META.json" files when shipping to CPAN, using tools such as
       Dist::Milla or Module::Install::CPANfile

   Why do we need yet another format?
       Here are some of the reasons that motivates the new cpanfile format.

       Not everything is a CPAN distribution
           First of all, it is annoying to write (a dummy) "Makefile.PL" when
           what you develop is not a CPAN distribution, just so that
           installation like "cpanm --installdeps ." would work.

           It gets more painful when you develop a web application that you
           want to deploy on a different environment using version control
           system (such as PaaS/cloud infrastructure), because it requires you
           to often commit the META file or "inc/" directory (or even worse,
           both) to a repository.

           Many web application frameworks generate a boiler-plate
           "Makefile.PL" for dependency declaration and to let you install
           dependencies with "cpanm --installdeps .", but that doesn't always
           mean they are meant to be installed. Things can be often much
           simpler if you run the application from the checkout directory.

           With cpanfile, dependencies can be installed either globally or
           locally using supported tools such as cpanm or Carton. Because
           "cpanfile" lists all the dependencies of your entire application
           and will be updated over time, it makes perfect sense to commit the
           file to a version control system, and push the file for a
           deployment.

       Familiar DSL syntax
           This is a new file type, but the format and syntax isn't entirely
           new. The metadata it can declare is exactly a subset of "Prereqs"
           in CPAN Meta Spec.

           The syntax borrows a lot from Module::Install. Module::Install is a
           great way to easily declare module metadata such as name, author
           and dependencies. cpanfile format is simply to extract the
           dependencies into a separate file, which means most of the
           developers are familiar with the syntax.

       Complete CPAN Meta Spec v2 support
           "cpanfile" basically allows you to declare CPAN::Meta::Spec
           prerequisite specification using an easy Perl DSL syntax. This
           makes it easy to declare per-phase dependencies and newer version 2
           features such as conflicts and version ranges.

   How can I start using "cpanfile"?
       First of all, most distributions on CPAN are not required to update to
       this format.

       If your application currently uses "Makefile.PL" etc. for dependency
       declaration because of the current toolchain implementation (e.g.
       "cpanm --installdeps ."), you can upgrade to "cpanfile" while keeping
       the build file based installation working for the backward
       compatibility.

       If you are an author of CPAN module and want to manage CPAN module
       prerequisites using "cpanfile" you can use one of the following tools:

       Dist::Milla
           Dist::Milla is a profile for Dist::Zilla that has a "cpanfile"
           support to declare dependencies for your module.

       Dist::Zilla
           Dist::Zilla::Plugin::Prereqs::FromCPANfile provides a way to merge
           dependencies declared in "cpanfile" into META files as well as
           build files. You can combine them using other prerequisite scanners
           like "AutoPrereqs".

       Minilla
           Minilla is a yet another authoring tool that supports "cpanfile" as
           a way to describe dependencies for your CPAN module.

       Module::Install
           Module::Install::CPANfile provides a "cpanfile" DSL that reads
           "cpanfile" to merge prerequisites when dumping "MYMETA" files upon
           installation.

       Module::Build
           Module::Build::Pluggable::CPANfile merges "cpanfile" dependencies
           from "Build.PL" when dumping out MYMETA information.

           However you're recommended to switch to an authoring system that
           emits "Build.PL" with parsed CPANfile information, like Dist::Zilla
           mentioned above.

       ExtUtils::MakeMaker
           ExtUtils::MakeMaker::CPANfile merges "cpanfile" prerequisites when
           dumping "MYMETA" files upon installation.

           However you're recommended to switch to an authoring system that
           emits "Makefile.PL" with parsed CPANfile information, like
           Dist::Zilla mentioned above.

perl v5.26.2                      2018-05-17                 cpanfile-faq(3pm)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2024 Hurricane Electric. All Rights Reserved.