內容

名稱

CPAN::Meta::History::Meta_1_4 - META.yml 的 1.4 版元資料規格

前言

這是 META.yml 檔案 1.4 版規格的歷史副本,版權所有者為 Ken Williams,並採用與 Perl 相同的條款授權。

與原始版本相比的修改

SYNOPSIS

--- #YAML:1.0
name: Module-Build
abstract: Build and install Perl modules
version: 0.20
author:
  - Ken Williams <kwilliams@cpan.org>
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: http://dev.perl.org/licenses/
meta-spec:
  version: 1.4
  url: http://module-build.sourceforge.net/META-spec-v1.3.html
generated_by: Module::Build version 0.20

DESCRIPTION

此文件說明 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 找到。

FORMAT

META.yml 檔案以 YAML 格式撰寫(請參閱 http://www.yaml.org/)。

請參閱下列連結,瞭解我們選擇 YAML 而不是 XML 或 Data::Dumper 的原因。

TERMINOLOGY

distribution

這是 META.yml 規格所說明的主要物件。在此文件中,通常是指模組、指令碼和/或文件集合,供其他開發人員一起使用。散佈的範例包括 Class-Containerlibwww-perlDBI

module

這是指通常包含在單一檔案中的可重複使用程式庫。目前,我們主要討論 perl 模組,但此規格應足夠開放,也能套用於其他語言(例如 python、ruby)。模組的範例包括 Class::ContainerLWP::SimpleDBD::File

HEADER

META.yml 檔案的第一行應為有效的 YAML 文件標頭,例如 "--- #YAML:1.0"

FIELDS

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: 0.20

(規範 1.0) [必填] {version} META.yml 檔案所指的發行版本。

摘要

範例

abstract: Build and install Perl modules.

(規範 1.1) [必填] {string} 對發行用途的簡短說明。

作者

範例

author:
  - Ken Williams <kwilliams@cpan.org>

(規範 1.1) [必填] {字串清單} 指出發行作者的 YAML 序列。建議格式為作者姓名 <電子郵件地址>。

授權

範例

license: perl

(規範 1.0) [必填] {string} 此發行可使用和重新發行的授權。

必須是下列授權之一

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::Build 和 MakeMaker 等工具可能會停止產生此欄位。

需要

範例

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

(規格 1.0) [選用] {對應} 一個 YAML 對應,指出此散佈正確運作所需的 Perl 先決條件。金鑰為先決條件的名稱(模組名稱或「perl」),而值則為 「版本規格」 中所述的版本規格。

建議

範例

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 對應,其中包含可選功能的名稱,當其需求得到滿足時,這些功能就會提供。對於每個功能,都會提供說明,以及任何 「需求」「建置需求」「衝突」,這些需求和衝突在此子內容中的意義與本文檔其他地方所述相同。

建置需求

範例

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

(規格 1.0) [選用] {對應} 一個 YAML 對應,指出建置和/或測試此散佈所需的 Perl 先決條件。金鑰為先決條件的名稱(模組名稱或「perl」),而值則為 「版本規格」 中所述的版本規格。安裝散佈後,不需要這些相依性。

設定需求

範例

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

(規格 1.4) [選用] {對應} 一個 YAML 對應,指出設定此散佈之前所需的 Perl 先決條件。金鑰為先決條件的名稱(模組名稱或「perl」),而值則為 「版本規格」 中所述的版本規格。安裝散佈後,不需要這些相依性。

衝突

範例

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

(規格 1.0) [選用] {對應} 一個 YAML 對應,指出在安裝此散佈時無法安裝的任何項目。這是相當罕見的情況。衝突 的金鑰為項目名稱(模組名稱或「perl」),而值則為 「版本規格」 中所述的版本規格。

動態設定

範例

dynamic_config: 0

(規格 1.0) [選用] {布林值} 一個布林值旗標,指出在建置此散佈時是否必須執行 Build.PLMakefile.PL(或類似檔案),或者是否可以僅透過參閱其元資料檔案來建置、測試和安裝。將此值設定為 true 值的主要原因是,模組在建置/安裝過程中執行一些動態設定(詢問問題、偵測環境等)。

目前 Module::Build 實際上不會對此標記做任何事 - 它可能由 CPAN 等較高層級的工具來做有用的事。它潛在地帶來許多安全性、封裝和便利性的改善。

如果省略此欄位,它預設為 1 (真)。

私有

(已棄用) (規範 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:
  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,不希望搜尋引擎搜尋到,這很有用。

檔案

(規範 1.1) [選用] 排除任何所列檔案。

目錄

(規範 1.1) [選用] 排除所列目錄(含)以下的任何內容。

[注意:規範的先前版本使用 dir 取代 directory,但我認為 MakeMaker 和各種使用者已開始使用 directory,因此我們出於尊重而改用它。]

套件

(規格 1.1) [選用] 排除列出的套件。

命名空間

(規格 1.1) [選用] 排除列出的命名空間(含)以下所有項目,但包含列出的命名空間本身。

關鍵字

範例

keywords:
  - make
  - build
  - install

(規格 1.1) [選用] {清單} 描述此套件的一系列關鍵字/片語。

資源

範例

resources:
  license: http://dev.perl.org/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) [選用] {對應} 與此套件相關的任何 URL 資源對應。所有小寫字母的鍵,例如 homepagelicensebugtracker,都已由本規格保留,因為它們在此規格中定義了「官方」含義。如果您想要新增自己的「特殊」項目(例如上面的「MailingList」項目),請使用至少一個大寫字母。

目前官方鍵的集合為

首頁

此專案在網路上的官方首頁。

授權

此套件授權的官方聲明 URL。

錯誤追蹤器

此專案的錯誤追蹤器 URL(例如 Bugzilla 或 RT佇列)。

產生者

範例

generated_by: Module::Build version 0.20

(規格 1.0) [必填] {字串} 指示用於建立此 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 日
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 改為 "作者",因為這一直是實際 META.yml 檔案中實際稱呼的方式。

  • 將 "==" 運算子新增至支援的版本檢查運算子清單中。

  • 註明 "distribution_type" 欄位基本上沒有意義,不應該實際使用。

  • 稍微釐清 "dynamic_config"

2005 年 8 月 23 日
  • 移除名稱 CPAN::META::Specification,因為這暗示了一個實際上不存在的模組。

2007 年 6 月 12 日