diff --git a/cn-introduction/04-schema.md b/cn-introduction/04-schema.md
index d4ebcf2..1acaef4 100644
--- a/cn-introduction/04-schema.md
+++ b/cn-introduction/04-schema.md
@@ -1,51 +1,54 @@
+
# composer.json
本章将解释所有在 `composer.json` 中可用的字段。
---
-- [composer.json](#composerjson)
- - [JSON schema](#json-schema)
- - [Root 包](#root-包)
- - [属性](#属性)
- - [包名 `name`](#包名-name)
- - [描述 `description`](#描述-description)
- - 版本 `version`
- - 安装类型 `type`
- - 关键字 `keywords`
- - 项目主页 `homepage`
- - 版本发布时间 `time`
- - 许可协议 `license`
- - 作者 `authors`
- - 支持 `support`
- - [Package links](#package-links)
+- [composer.json](#composer.json)
+ - [JSON schema](#JSON schema)
+ - [Root 包](#Root Package)
+ - [属性](#Properties)
+ - [包名 `name`](#name)
+ - [描述 `description`](#description)
+ - [版本 `version`](#version)
+ - [安装类型 `type`](#type)
+ - [关键字 `keywords`](#keywords)
+ - [项目主页 `homepage`](#homepage)
+ - [版本发布时间 `time`](#time)
+ - [许可协议 `license`](#license)
+ - [作者 `authors`](#authors)
+ - [支持 `support`](#support)
+ - [Package links](#Package links)
- [require](#require)
- - require-dev (root-only)
+ - [require-dev (root-only)](#require-dev)
- [conflict](#conflict)
- [replace](#replace)
- [provide](#provide)
- - suggest
- - autoload
- - PSR-0
- - Classmap
- - Files
- - include-path
- - target-dir
- - minimum-stability (root-only)
- - prefer-stable (root-only)
- - repositories (root-only)
- - config (root-only)
- - scripts (root-only)
- - extra
- - bin
- - archive
+ - [suggest](#suggest)
+ - [autoload](#autoload)
+ - [PSR-0](#PSR-0)
+ - [Classmap](#Classmap)
+ - [Files](#Files)
+ - [include-path](#include-path)
+ - [target-dir](#target-dir)
+ - [minimum-stability (root-only)](#minimum-stability)
+ - [prefer-stable (root-only)](#prefer-stable)
+ - [repositories (root-only)](#repositories)
+ - [config (root-only)](#config)
+ - [scripts (root-only)](#scripts)
+ - [extra](#extra)
+ - [bin](#bin)
+ - [archive](#archive)
---
+
## JSON schema
我们有一个 [JSON schema](http://json-schema.org) 格式化文档,它也可以被用来验证你的 `composer.json` 文件。事实上,它已经被 `validate` 命令所使用。 你可以在这里找到它: [`res/composer-schema.json`](https://github.com/composer/composer/blob/master/res/composer-schema.json).
+
## Root 包
“root 包”是指由 `composer.json` 定义的在你项目根目录的包。这是 `composer.json` 定义你项目所需的主要条件。(简单的说,你自己的项目就是一个 root 包)
@@ -59,8 +62,10 @@
> 但是,如果你从 GitHub 上克隆了 `monolog` 为它修复 bug,
> 那么此时 `monolog` 就是“root 包”。
+
## 属性
+
### 包名 `name`
包的名称,它包括供应商名称和项目名称,使用 `/` 分隔。
@@ -72,12 +77,14 @@
对于需要发布的包(库),这是必须填写的。
+
### 描述 `description`
一个包的简短描述。通常这个最长只有一行。
对于需要发布的包(库),这是必须填写的。
+
### 版本 `version`
`version` 不是必须的,并且建议忽略(见下文)。
@@ -101,6 +108,7 @@
> 因此 `version` 定义的版本号必须是真实准确的。
> 自己手动指定的 `version`,最终有可能在某个时候因为人为错误造成问题。
+
### 安装类型 `type`
包的安装类型,默认为 `library`。
@@ -116,6 +124,7 @@ composer 原生支持以下4种类型:
仅在你需要一个自定义的安装逻辑时才使用它。建议忽略这个属性,采用默认的 `library`。
+
### 关键字 `keywords`
该包相关的关键词的数组。这些可用于搜索和过滤。
@@ -130,12 +139,14 @@ composer 原生支持以下4种类型:
可选。
+
### 项目主页 `homepage`
该项目网站的 URL 地址。
可选。
+
### 版本发布时间 `time`
版本发布时间。
@@ -144,6 +155,7 @@ composer 原生支持以下4种类型:
可选。
+
### 许可协议 `license`
包的许可协议,它可以是一个字符串或者字符串数组。
@@ -193,6 +205,7 @@ composer 原生支持以下4种类型:
同样,当有多个许可协议需要结合使用时("conjunctive license"),它们应该被 "and" 分隔,并写在括号中。
+
### 作者 `authors`
包的作者。这是一个对象数组。
@@ -225,6 +238,7 @@ composer 原生支持以下4种类型:
可选,但强烈建议提供此内容。
+
### 支持 `support`
获取项目支持的向相关信息对象。
@@ -249,6 +263,7 @@ composer 原生支持以下4种类型:
可选。
+
### Package links
下面提到的所有对象,都应该是 包名 到 [版本](01-basic-usage.md#包版本) 的映射对象。
@@ -303,20 +318,24 @@ composer 原生支持以下4种类型:
它也可以应用于行内别名,这样它将匹配一个约束,否则不会。更多信息请参考 [别名](articles/aliases.md)。
+
#### require
必须的软件包列表,除非这些依赖被满足,否则不会完成安装。
+
#### require-dev (root-only)
这个列表是为开发或测试等目的,额外列出的依赖。“root 包”的 require-dev 默认是会被安装的。然而 `install` 或 `update` 支持使用 `--no-dev` 参数来跳过 `require-dev` 字段中列出的包。
+
#### conflict
此列表中的包与当前包的这个版本冲突。它们将不允许同时被安装。
请注意,在 `conflict` 中指定类似于 `<1.0, >= 1.1` 的版本范围时,这表示它与小于1.0 *并且* 同时大等于1.1的版本冲突,这很可能不是你想要的。在这种情况下你可能想要表达的是 `<1.0 | >= 1.1` 。
+
#### replace
这个列表中的包将被当前包取代。这使你可以 fork 一个包,以不同的名称和版本号发布,同时要求依赖于原包的其它包,在这之后依赖于你 fork 的这个包,因为它取代了原来的包。
@@ -325,10 +344,12 @@ composer 原生支持以下4种类型:
注意,在使用上述方法取代子包时,通常你应该只对子包使用 `self.version` 这一个版本约束,以确保主包仅替换掉子包的准确版本,而不是任何其他版本。
+
#### provide
List of other packages that are provided by this package. This is mostly useful for common interfaces. A package could depend on some virtual `logger` package, any library that implements this logger interface would simply list it in `provide`.
+
### suggest
建议安装的包,它们增强或能够与当前包良好的工作。这些只是信息,并显示在依赖包安装完成之后,给你的用户一个建议,他们可以添加更多的包。
@@ -343,12 +364,14 @@ List of other packages that are provided by this package. This is mostly useful
}
}
+
### autoload
PHP autoloader 的自动加载映射。
通常 [`PSR-0`](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md) autoloading、`classmap` generation 和 `files` 方式都是支持的。PSR-0 是推荐的方式,因为它提供了更大的灵活性(当你添加新的类文件时,不需要重新生成 autoloader)。
+
#### PSR-0
在 `psr-0` key 下你定义了一个命名空间到实际路径的映射(相对于包的根目录)。注意,这里同样支持 PEAR-style 方式的约定(与命名空间不同,PEAR 类库在类名上采用了下划线分隔)。
@@ -393,6 +416,7 @@ PSR-0 方式并不仅限于申明命名空间,也可以是精确到类级别
}
}
+
#### Classmap
`classmap` 引用的所有组合,都会在 install/update 过程中生成,并存储到 `vendor/composer/autoload_classmap.php` 文件中。这个 map 是经过扫描指定目录(同样支持直接精确到文件)中所有的 `.php` 和 `.inc` 文件里内置的类而得到的。
@@ -407,6 +431,7 @@ PSR-0 方式并不仅限于申明命名空间,也可以是精确到类级别
}
}
+
#### Files
如果你想要明确的指定,在每次请求时都要载入某些文件,那么你可以使用 'files' autoloading。通常作为函数库的载入方式(而非类库)。
@@ -419,6 +444,7 @@ PSR-0 方式并不仅限于申明命名空间,也可以是精确到类级别
}
}
+
### include-path
> **不建议**:这是目前唯一支持传统项目的做法,所有新的代码都建议使用自动加载。
@@ -434,6 +460,7 @@ PSR-0 方式并不仅限于申明命名空间,也可以是精确到类级别
可选。
+
### target-dir
定义当前包安装的目标文件夹。
@@ -453,6 +480,7 @@ Symfony 就是一个例子。它有一些独立的包作为组件。Yaml 组件
可选。
+
### minimum-stability (root-only)
这定义了通过稳定性过滤包的默认行为。默认为 `stable`(稳定)。因此如果你依赖于一个 `dev`(开发)包,你应该明确的进行定义。
@@ -461,12 +489,14 @@ Symfony 就是一个例子。它有一些独立的包作为组件。Yaml 组件
可用的稳定性标识(按字母排序):`dev`、`alpha`、`beta`、`RC`、`stable`。
+
### prefer-stable (root-only)
当此选项被激活时,Composer 将优先使用更稳定的包版本。
使用 `"prefer-stable": true` 来激活它。
+
### repositories (root-only)
使用自定义的包资源库。
@@ -530,6 +560,7 @@ Repositories 并不是递归调用的,只能在“Root包”的 `composer.json
> **注意:** 顺序是非常重要的,当 Composer 查找资源包时,它会按照顺序进行。默认情况下 Packagist 是最后加入的,因此自定义设置将可以覆盖 Packagist 上的包。
+
### config (root-only)
下面的这一组选项,仅用于项目。
@@ -563,12 +594,14 @@ Repositories 并不是递归调用的,只能在“Root包”的 `composer.json
}
}
+
### scripts (root-only)
Composer 允许你在安装过程中的各个阶段挂接脚本。
更多细节和案例请查看 [脚本](articles/scripts.md)。
+
### extra
任意的,供 `scripts` 使用的额外数据。.
@@ -579,6 +612,7 @@ Composer 允许你在安装过程中的各个阶段挂接脚本。
可选。
+
### bin
A set of files that should be treated as binaries and symlinked into the `bin-dir` (from config).
@@ -587,6 +621,7 @@ See [Vendor Binaries](articles/vendor-binaries.md) for more details.
可选。
+
### archive
这些选项在创建包存档时使用。