内容

名称

CPAN::Meta::History::Meta_1_3 - META.yml 的 1.3 版元数据规范

序言

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

说明

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

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.3
  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

开源

该发行版在 http://www.opensource.org/licenses/ 上列出的其他一些开放源代码计划批准的许可下获得许可。

perl

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

限制性

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

无限制

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

distribution_type

示例

distribution_type: module

(规范 1.0)[可选] {string} 此发行版中包含哪种内容。CPAN 上的大多数内容都是模块(也可以表示模块集合),但有些内容是脚本

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

requires

示例

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

(规范 1.0)[可选] {map} 一个 YAML 映射,指示此发行版正常运行所需的 Perl 模块。键是模块名称,值是 “版本规范” 中描述的版本规范。

recommends

示例

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

(规范 1.0)[可选] {map} 一个 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

(规范 1.1)[可选] {map} 一个 YAML 序列,其中包含可选功能的名称,当满足其要求时,这些功能将可用。对于每个功能,都提供了说明以及任何 “requires”“build_requires”“conflicts”requires_packagesrequires_osexcludes_os,这些内容在此子上下文中具有与本文档中其他地方描述的相同含义。

build_requires

示例

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

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

conflicts

示例

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

(规范 1.0) [可选] {map} 指示在此发行版安装期间无法安装的 Perl 模块的 YAML 映射。这是一个非常罕见的情况。conflicts 的键是模块名称,值是 "VERSION SPECIFICATIONS" 中描述的版本规范。

dynamic_config

示例

dynamic_config: 0

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

目前 Module::Build 实际上不会对此标志执行任何操作 - 它可能由 CPAN 等更高级别的工具来执行有用的操作。它可能带来许多安全性、打包和便利性改进。

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

private

(已弃用) (规范 1.0) [可选] {map} 此字段已重命名为 "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) [可选] {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 资源的映射。所有小写键,例如 homepagelicensebugtracker,都由本规范保留,因为它们在此规范中定义了“官方”含义。如果您想添加自己的“特殊”条目(如上面的“MailingList”条目),请至少使用一个大写字母。

当前的一组官方键是

homepage

该项目的官方网站。

许可证

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

错误跟踪器

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

生成者

示例

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 基本原理文章。

  • 修复了指向新 http://nntp.x.perl.org/group/ 站点的现有 YAML 讨论线程链接。

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

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

  • 版本升级。

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

  • "recommends" 字段添加了备选建议。

  • requires_build_tools 字段添加了建议。

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

  • 添加了 "VERSION SPECIFICATIONS" 部分。

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

  • auto_regenerate 字段添加了建议。

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

  • 添加了 "keywords" 字段,作为帮助搜索发行版的一种手段。

  • 添加了 "TERMINOLOGY" 部分,以解释可能模棱两可的某些术语。

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