内容

名称

CPAN::Meta::History::Meta_1_2 - META.yml 的 1.2 版元数据规范

前言

这是 META.yml 文件 1.2 版规范的历史副本,版权归 Ken Williams 所有,并根据与 Perl 相同的条款许可。

与原始版本的修改

概要

--- #YAML:1.0
name: Module-Build
abstract: Build and install Perl modules
version: 0.20
author:
  - Ken Williams <[email protected]>
license: perl
distribution_type: module
requires:
  Config: 0
  Cwd: 0
  Data::Dumper: 0
  ExtUtils::Install: 0
  File::Basename: 0
  File::Compare: 0
  File::Copy: 0
  File::Find: 0
  File::Path: 0
  File::Spec: 0
  IO::File: 0
  perl: 5.005_03
recommends:
  Archive::Tar: 1.00
  ExtUtils::Install: 0.3
  ExtUtils::ParseXS: 2.02
  Pod::Text: 0
  YAML: 0.35
build_requires:
  Test: 0
urls:
  license: https://dev.perl5.cn/licenses/
meta-spec:
  version: 1.2
  url: http://module-build.sourceforge.net/META-spec-v1.2.html
generated_by: Module::Build version 0.20

描述

本文档描述了 META.yml 规范的 1.2 版本。

META.yml 文件描述了贡献的 Perl 发行版的重要属性,例如在 CPAN 上找到的那些。它通常由 Module::Build、Module::Install 和 ExtUtils::MakeMaker 等工具创建。

META.yml 文件中的字段旨在帮助维护模块集合(如 CPAN)的人员、编写安装工具(如 CPAN.pm 或 CPANPLUS)的人员,或者只是想在下载和开始安装发行版之前了解一些有关发行版的信息的人员。

注意:此规范的最新稳定版本始终可以在 http://module-build.sourceforge.net/META-spec-current.html 中找到,而最新开发版本(可能包含不会进入稳定版本的内容)始终可以在 http://module-build.sourceforge.net/META-spec-blead.html 中找到。

格式

META.yml 文件使用 YAML 格式编写(参见 http://www.yaml.org/)。

查看以下链接,了解我们为什么选择 YAML 而不是 XML 或 Data::Dumper

术语

发行版

这是 META.yml 规范描述的主要对象。在本文件上下文中,它通常指的是为其他开发人员使用而分发的模块、脚本和/或文档的集合。

模块

这指的是一个可重用的代码库,通常包含在一个文件中。目前,我们主要讨论 perl 模块,但此规范应该足够开放,可以应用于其他语言(例如 python、ruby)。

版本规范

某些字段需要版本规范(例如 "requires""recommends""build_requires" 等)。本节详细介绍了当前支持的版本规范。

如果列出了单个版本,则该版本被认为是最小支持版本。

如果版本号为 0,则支持任何版本。

此外,对于更复杂的依赖关系,规范支持版本列表,每个版本可以选择在前面加上关系运算符。

支持的运算符包括 <(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)和 !=(不等于)。

如果给出了列表,则从左到右进行评估,以便列表中与先前规范冲突的任何规范都被后面的规范覆盖。

示例

>= 1.2, != 1.5, < 2.0

从 1.2 版开始的任何版本,除了 1.5 版,并且早于 2.0 版。

HEADER

META.yml 文件的第一行应该是有效的 YAML 文档头,例如 "--- #YAML:1.0"

FIELDS

META.yml 文件的其余部分是一个大的 YAML 映射,其键在此处描述。

meta-spec

示例

meta-spec:
  version: 1.2
  url: http://module-build.sourceforge.net/META-spec-v1.2.html

(规范 1.1) [必需] {URL} 此字段指示所用 META.yml 规范版本的地址。

name

示例

name: Module-Build

(规范 1.0) [必需] {字符串} 分发包的名称,通常通过获取分发包中的“主模块”并将“::”更改为“-”来创建。但是,有时它完全不同,例如 libwww-perl 分发包(参见 http://search.cpan.org/author/GAAS/libwww-perl/)。

version

示例

version: 0.20

(规范 1.0) [必需] {版本} META.yml 文件所指的分发包的版本。

abstract

示例

abstract: Build and install Perl modules.

(规范 1.1) [必需] {字符串} 对分发包目的的简短描述。

author

示例

author:
  - Ken Williams <[email protected]>

(规范 1.1) [必需] {字符串列表} 一个 YAML 序列,指示分发包的作者。首选形式是作者姓名 <电子邮件地址>。

license

示例

license: perl

(规范 1.0) [必需] {字符串} 此分发包可被使用和重新分发的许可证。

必须是以下许可证之一

perl

该分发包可以与 perl 本身相同的条款复制和重新分发(这是 CPAN 上模块最常见的许可选项)。这是一个双重许可证,用户可以选择 GPL 版本 1 或 Artistic 版本 1 许可证。

gpl

该分发包是在 GNU 通用公共许可证版本 2 的条款下分发的 (http://opensource.org/licenses/GPL-2.0).

lgpl

该分发包是在 GNU 宽通用公共许可证版本 2 的条款下分发的 (http://opensource.org/licenses/LGPL-2.1).

artistic

该发行版根据 Artistic 许可证版本 1 授权,如标准 Perl 发行版中的 Artistic 文件所指定 (http://opensource.org/licenses/Artistic-Perl-1.0).

bsd

该发行版根据 BSD 3-Clause 许可证授权 (http://opensource.org/licenses/BSD-3-Clause).

open_source

该发行版根据列在 http://www.opensource.org/licenses/ 的其他开放源代码倡议批准的许可证授权。

unrestricted

该发行版根据未经 www.opensource.org 批准但允许无限制分发的许可证授权。

restrictive

未经作者和/或版权所有者特别许可,不得重新分发该发行版。

distribution_type

示例

distribution_type: module

(Spec 1.0) [可选] {字符串} 此发行版中包含的内容类型。CPAN 上的大多数内容都是 module(也可以指模块集合),但有些内容是 script

不幸的是,此字段基本上毫无意义,因为许多发行版都是多种内容的混合体,或者是一些新的东西,或者根据使用者的不同而主观地侧重点不同。Module::Build 和 MakeMaker 等工具可能会停止生成此字段。

requires

示例

requires:
  Data::Dumper: 0
  File::Find: 1.03

(Spec 1.0) [可选] {映射} 一个 YAML 映射,指示此发行版正常运行所需的 Perl 模块。键是模块名称,值是版本规范,如 Module::Build 中的 "requires" 参数所述。

recommends

示例

recommends:
  Data::Dumper: 0
  File::Find: 1.03

(Spec 1.0) [可选] {映射} 一个 YAML 映射,指示此发行版为了增强操作而推荐的 Perl 模块。

替代方案:向用户展示哪些功能依赖于哪些模块可能是有益的,以便他们可以就安装哪些推荐模块做出明智的决定。

示例

optional_features:
- foo:
    description: Provides the ability to blah.
    requires:
      Data::Dumper: 0
      File::Find: 1.03
- bar:
    description: This feature is not available on this platform.
    excludes_os: MSWin32

(Spec 1.1) [可选] {映射} 一个 YAML 序列,包含满足其要求时可用的可选功能的名称。对于每个功能,都提供描述以及任何 "requires""build_requires""conflicts"requires_packagesrequires_osexcludes_os,它们在此子上下文中具有与本文档其他地方描述的相同含义。

build_requires

示例

build_requires:
  Data::Dumper: 0
  File::Find: 1.03

(Spec 1.0) [可选] {映射} 一个 YAML 映射,指示构建和/或测试此发行版所需的 Perl 模块。安装模块后,不需要这些依赖项。

conflicts

示例

conflicts:
  Data::Dumper: 0
  File::Find: 1.03

(Spec 1.0) [可选] {映射} 一个 YAML 映射,指示在安装此发行版时无法安装的 Perl 模块。这种情况很少见。

dynamic_config

示例

dynamic_config: 0

(规范 1.0) [可选] {布尔值} 一个布尔标志,指示在构建此发行版时是否必须执行 *Build.PL* 或 *Makefile.PL*(或类似文件),或者是否可以仅通过查阅其元数据文件来构建、测试和安装。如果您的模块在构建/安装过程中执行了一些动态配置(提出问题、感知环境等),则将此值设置为 true 的主要原因。

目前 Module::Build 实际上并没有对这个标志做任何处理 - 它可能需要由像 CPAN 这样的更高级别的工具来做一些有用的事情。它有可能带来很多安全、打包和便利性的改进。

如果省略此字段,则默认为 1(true)。

private

(已弃用) (规范 1.0) [可选] {映射} 此字段已重命名为 "no_index"。见下文。

provides

示例

provides:
  Foo::Bar:
    file: lib/Foo/Bar.pm
    version: 0.27_02
  Foo::Bar::Blah:
    file: lib/Foo/Bar/Blah.pm
  Foo::Bar::Baz:
    file: lib/Foo/Bar/Baz.pm
    version: 0.3

(规范 1.1) [可选] {映射} 一个 YAML 映射,描述此发行版提供的所有包。此信息可以(在某些情况下是)由发行版和自动化机制(如 PAUSE、CPAN 和 search.cpan.org)用于构建索引,说明在哪个发行版中可以找到各种包。

当使用像 Module::Build 这样的工具,可以自动为您的发行版生成 provides 映射时,请确保检查它生成的內容,以确保它有意义 - 索引器通常会信任 provides 字段(如果存在),而不是扫描发行版文件本身来找出包和版本。这是一件好事,因为这意味着您可以使用 provides 字段来精确地告诉索引器您希望索引发行版的哪些内容,而不是依赖它们来猜测您希望索引的内容。

no_index

示例

no_index:
  file:
  - My/Module.pm
  dir:
  - My/Private
  package:
  - My::Module::Stuff
  namespace:
  - My::Module::Stuff

(规范 1.1) [可选] {映射} 一个 YAML 映射,描述任何对搜索和索引工具不感兴趣的私有(即实现工件)文件、目录、包和命名空间。当没有 provides 字段时,这很有用。

(注意:我不确定谁实际查看此字段,或者他们到底用它做什么。此规范可能与实际使用情况有所不同。)

file

(规范 1.1) [可选] 排除任何列出的文件。

dir

(规范 1.1) [可选] 排除列出目录下的所有内容。

package

(规范 1.1) [可选] 排除列出的包。

namespace

(规范 1.1) [可选] 排除列出命名空间下的所有内容,但不包括列出的命名空间本身。

keywords

示例

keywords:
  - make
  - build
  - install

(Spec 1.1) [可选] {列表} 描述此发行版的关键词/短语序列。

resources

示例

resources:
  license: https://dev.perl5.cn/licenses/
  homepage: http://sourceforge.net/projects/module-build
  bugtracker: http://rt.cpan.org/NoAuth/Bugs.html?Dist=Module-Build
  MailingList: http://lists.sourceforge.net/lists/listinfo/module-build-general

(Spec 1.1) [可选] {映射} 与此发行版相关的任何 URL 资源的映射。所有小写键,例如 homepagelicensebugtracker,由本规范保留,因为它们在本规范中具有定义的“官方”含义。如果您想添加自己的“特殊”条目(如上面的“MailingList”条目),请使用至少一个大写字母。

当前的官方键集是

homepage

此项目在网络上的官方主页。

license

此发行版许可证的官方声明的 URL。

bugtracker

此项目的错误跟踪器(例如 Bugzilla 或 RT 队列)的 URL。

generated_by

示例

generated_by: Module::Build version 0.20

(Spec 1.0) [必需] {字符串} 指示用于创建此 META.yml 文件的工具。最好同时包含工具名称及其版本,但此字段本质上是不透明的,至少目前是这样。如果 META.yml 是手动生成的,建议在此处指定作者。

[注意:我用来收集有关 META.yml 使用情况统计信息的 meta_stats.pl 脚本更喜欢上面列出的形式,即它在 /\s+version\s+/ 上拆分,将第一个字段作为生成文件的工具名称,第二个字段作为该工具的版本。RWS]

另请参阅

CPAN

CPAN.pm

CPANPLUS

Data::Dumper

ExtUtils::MakeMaker

Module::Build

Module::Install

XML

YAML

历史

2003 年 3 月 14 日(圆周率日)
  • 创建了此文档的 1.0 版。

2003 年 5 月 8 日
2003 年 11 月 13 日
  • 添加了更多 YAML 理念文章。

  • 将指向 YAML 讨论主题的现有链接修复为指向新的 http://nntp.x.perl.org/group/ 站点。

  • 添加并弃用了 "private" 字段。

  • 添加了 "abstract"configurerequires_packagesrequires_osexcludes_os"no_index" 字段。

  • 版本升级。

2003 年 11 月 16 日
  • 添加了 generationauthored_by 字段。

  • "recommends" 字段中添加备选提案。

  • 添加 requires_build_tools 字段的提案。

2003 年 12 月 9 日
  • 添加指向 CPAN 上此规范最新版本的链接。

  • 添加了 "版本规范" 部分。

  • 将名称从 Module::Build::META-spec 更改为 CPAN::META::Specification。

  • 添加 auto_regenerate 字段的提案。

2003 年 12 月 15 日
  • 添加 index 字段作为 "no_index" 的补充。

  • 添加 "keywords" 字段作为帮助搜索发行版的工具。

  • 添加 "术语" 部分来解释某些可能含糊不清的术语。

2005 年 7 月 26 日
  • 删除了一些从未真正支持的项目(generation、requires_build_tools、requires_packages、configure、requires_os、excludes_os、auto_regenerate),它们更像是头脑风暴的记录。

  • authored_by 更改为 "author",因为这始终是实际 META.yml 文件中使用的名称。

  • 将 "==" 运算符添加到支持的版本检查运算符列表中。

  • 指出 "distribution_type" 字段基本上毫无意义,不应该真正使用。

  • 澄清了 "dynamic_config"

2005 年 8 月 23 日
  • 删除了名称 CPAN::META::Specification,因为它暗示了一个实际上不存在的模块。