内容

名称

CPAN::Meta::History::Meta_1_4 - META.yml 的版本 1.4 元数据规范

前言

这是 META.yml 文件版本 1.4 规范的历史副本,版权归 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
resources:
  license: https://dev.perl5.cn/licenses/
meta-spec:
  version: 1.4
  url: http://module-build.sourceforge.net/META-spec-v1.3.html
generated_by: Module::Build version 0.20

描述

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

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 规范描述的主要对象。在本文件中,它通常指的是为其他开发人员使用而一起分发的模块、脚本和/或文档的集合。发行版的示例包括 Class-Containerlibwww-perlDBI

模块

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

头部

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

字段

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

meta-spec

示例

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

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

name

示例

name: Module-Build

(规范 1.0) [必需] {字符串} 分发包的名称,通常通过获取分发包中的“主模块”并将“::”更改为“-”来创建。但是,有时它完全不同,例如 libwww-perl 分发包(参见 http://search.cpan.org/dist/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) [必需] {字符串} 此分发包可被使用和重新分发的许可证。

必须是以下许可证之一

apache

该分发包根据 Apache 软件许可证版本 1.1 授权 (http://opensource.org/licenses/Apache-1.1)。

artistic

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

bsd

该分发包根据 BSD 3 条款许可证授权 (http://opensource.org/licenses/BSD-3-Clause)。

gpl

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

lgpl

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

mit

该分发包根据 MIT 许可证授权 (http://opensource.org/licenses/MIT)。

mozilla

该分发包根据 Mozilla 公共许可证授权。(http://opensource.org/licenses/MPL-1.0http://opensource.org/licenses/MPL-1.1)

open_source

该分发包根据其他一些在 http://www.opensource.org/licenses/ 列出的开源倡议批准的许可证授权。

perl

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

restrictive

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

unrestricted

该发行版是在未经 www.opensource.org 批准的许可证下许可的,但允许无限制地分发。

distribution_type

示例

distribution_type: module

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

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

requires

示例

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

(规范 1.0) [可选] {映射} 一个 YAML 映射,指示此发行版正常运行所需的 Perl 先决条件。键是先决条件的名称(模块名称或 'perl'),值是版本规范,如 "版本规范" 中所述。

recommends

示例

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

(规范 1.0) [可选] {映射} 一个 YAML 映射,指示此发行版为了增强操作而推荐的 Perl 先决条件。键是先决条件的名称(模块名称或 'perl'),值是版本规范,如 "版本规范" 中所述。

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

示例

optional_features:
  foo:
    description: Provides the ability to blah.
    requires:
      Data::Dumper: 0
      File::Find: 1.03

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

build_requires

示例

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

(规范 1.0) [可选] {映射} 一个 YAML 映射,指示构建和/或测试此发行版所需的 Perl 先决条件。键是先决条件的名称(模块名称或 'perl'),值是版本规范,如 "版本规范" 中所述。安装发行版后,不需要这些依赖项。

configure_requires

示例

configure_requires:
  Module::Build: 0.2809
  Data::Dumper: 0
  File::Find: 1.03

(规范 1.4) [可选] {map} 一个 YAML 映射,指示在配置此发行版之前所需的 Perl 先决条件。键是先决条件的名称(模块名称或 'perl'),值是版本规范,如 "版本规范" 中所述。这些依赖项在发行版安装后不再需要。

冲突

示例

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

(规范 1.0) [可选] {map} 一个 YAML 映射,指示在安装此发行版时无法安装的任何项目。这是一种非常罕见的情况。conflicts 的键是项目名称(模块名称或 'perl'),值是版本规范,如 "版本规范" 中所述。

动态配置

示例

dynamic_config: 0

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

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

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

私有

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

提供

示例

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

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

no_index

示例

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

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

例如,http://search.cpan.org/ 在搜索 POD 时会排除 `no_index` 中列出的项目,这意味着这些目录中的文件不会被转换为 HTML 并公开 - 这在您有不想让搜索引擎遍历的示例或测试 POD 时很有用。

file

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

directory

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

[注意:规范的先前版本使用 `dir` 而不是 `directory`,但我认为 MakeMaker 和各种用户开始使用 `directory`,因此为了尊重,我们切换到它。]

package

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

namespace

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

keywords

示例

keywords:
  - make
  - build
  - install

(规范 1.1) [可选] {list} 描述此发行版的关键字/短语序列。

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
  repository: http://sourceforge.net/cvs/?group_id=45731
  MailingList: http://lists.sourceforge.net/lists/listinfo/module-build-general

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

当前的官方键集是

homepage

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

license

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

bugtracker

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

generated_by

示例

generated_by: Module::Build version 0.20

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

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

版本规范

某些字段需要版本规范(例如,"requires""recommends""build_requires" 等),以指示可能作为先决条件所需的某些其他模块的特定版本。本节详细介绍了当前支持的版本规范格式。

版本规范的最简单格式就是版本号本身,例如 2.4。这意味着必须存在至少 2.4 版本。要指示任何版本的先决条件都可以,即使先决条件根本没有定义版本,请使用版本 0

您还可以使用运算符 <(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)和 !=(不等于)。例如,规范 < 2.0 表示小于 2.0 的任何版本的先决条件都是合适的。

对于更复杂的情况,可以使用逗号将版本规范 AND 起来。规范 >= 1.2, != 1.5, < 2.0 表示必须至少为 1.2、小于 2.0 且不等于 1.5 的版本。

另请参阅

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,因为它暗示了一个实际上不存在的模块。

2007 年 6 月 12 日