composer.json

用法和package.json基本相似,区别在require的key由供应商和项目名两部分组成(允许两者命名相同),从而允许有两个同名的包,同时,用~符号表示大于当前版本小于下一个大版本。

Composer初次安装依赖后会生成composer.lock锁文件,在下次composer install时忽略compsoer.json的定义。如果你的依赖更新了版本,需要通过update命令更新进锁文件。

Root包

root包指由composer.json定义在项目根目录的包,简单来说就是自己的项目。root包的依赖关系由composer.json文件定义。

某些字段仅适用于root包上下文,如config字段。root包上下文会在工作环境改变时发生改变,如克隆一个依赖包,在其上开始工作。

属性

name:包名,它包括供应商名称和项目名称,使用 / 分隔,必须填写

description:描述,通常只有一行,对于发布的包,必须填写

version:版本号,version不是必须的,并且建议忽略,因为通常可以从VCS(git, svn, hg等)的信息推断出包的版本号。版本号的写法同package.json中的版本号。

type:安装类型,默认为library。它用来定义安装逻辑。composer原生支持4种类型。

library: 默认类型,它会简单的将文件复制到vendor目录。

project: 这表示当前包是一个项目,而不是一个库。例:框架应用程序 Symfony standard edition,内容管理系统 SilverStripe installer 或者完全成熟的分布式应用程序。使用 IDE 创建一个新的工作区时,这可以为其提供项目列表的初始化。

metapackage: 一个包含依赖信息并且触发依赖安装的空包,这将不会向系统写入文件。因此这种安装类型并不需要一个可安装的dist或source。

composer-plugin: 这种安装类型的包为其它包提供一个installler。详细请查看自定义安装类型

建议在清楚自己做什么的时候使用这个域,否则最好忽略它。

keywords:关键词,用于搜索和过滤,如logging,database,redis等,可选

homepage:项目主页,可选

time:版本发布时间,必须符合YYYY-MM-DD或YYYY-M-DD HH:MM:SS的格式,可选

license:许可协议,一个包允许多许可协议选择。可选强烈建议提供

authors:作者,每位作者提供name, email, homepage, role几个属性选择填写。可选强烈建议提供

support:获取项目支持的信息对象,包含email, issues, forum, wiki, irc, source几个属性,可选

package links:依赖声明,接受多个包名到版本号的映射对象,可选。可以使用require, require-dev, conflict, replace, provide, suggest几个键名。require和require-dev还支持稳定性标签(@,仅针对“root 包”)和对dev(开发)版本的明确引用(即:版本控制系统中的提交编号 commit)。

require,必须的软件包列表,除非这些依赖被满足,否则不会完成安装。

require-dev,为开发或测试等目的额外列出的依赖列表。root包的require-dev默认是会被安装的。然而install或update支持使用--no-dev参数来跳过require-dev字段中列出的包

conflict,与当前包版本冲突的包列表。它们将不允许同时被安装。

replace,被当前包取代的包列表,这个列表常用在用主包取代主包下的各子包。

provide,被当前包提供的包列表,如实现了logger接口的包可以将依赖logger接口的包列在其中。

suggest:建议安装的包列表,它们可以增强当前包的性能或是能与之良好地配合工作。这些只是信息(版本号变成描述信息),显示在包安装完成后,给用户一个建议。

autoload:PHP的自动加载映射,目前支持PSR-0, PSR-4, classmap, files几种方式,推荐使用PSR-4。下面有一个autoload的填写例子。

PSR-4,在键名下定义命名空间到路径(相对于root包)的映射,注意用\转义\。命名空间以\结尾。在自动加载名为Foo\Bar\Baz这样的类时,如果Foo\已经映射到了src/,自动加载器就会去src/Bar/Baz.php(如果这个路径存在的话)中寻找。自动加载支持命名空间指定多个路径或是空命名空间映射作为default选项。

PSR-0,类似PSR-4,它也支持PEAR风格的约定(与命名空间不同,PEAR 类库在类名上采用了下划线分隔)。PSR-0方式也可以是精确到类级别的指定。这对于只有一个类在全局命名空间的类库是非常有用的(如果 php 源文件也位于包的根目录)

classmap,可以用 classmap 生成支持自定义加载的不遵循 PSR-0/4 规范的类库。要配置它指向需要的目录,以便能够准确搜索到类文件。

file,若想要明确的指定,在每次请求时都要载入某些文件,那么你可以使用 'files' autoloading。通常作为函数库的载入方式

{

"autoload": {

"psr-0": {

"Monolog\": ["src/", "lib/"],

"UniqueGlobalClass": ""

},

"psr-4": { "": "src/" },

"classmap": ["src/", "lib/", "Something.php"],

"files": ["src/MyLibrary/functions.php"]

}

}

autoload-dev:与autoload的关系类似require和require-dev。

minimum-stability:通过稳定性过滤依赖包,默认为stable,初次以外还有dev, alpha, beta, RC可用。可选

prefer-stable:此选项被激活时,Composer 将优先使用更稳定的包版本,和minimum-stability配合使用,设定为true来激活,可选

repositories:使用自定义的包资源库,默认使用packagist,支持以下类型的包资源库

composer:一个网络服务器(HTTP、FTP、SSH)上的packages.json文件,它包含有一个composer.json对象的列表和额外的dist 和/或source信息。这个packages.json 文件用一个PHP流加载。可以使用options参数来设定额外的流信息。

vcs:从git/svn/fossil/hg获取资源

pear:从PEAR获取资源

package:除了上面的类型,就需要内联一个composer.json对象

{

"repositories": [

{

"type": "composer",

"url": "http://packages.example.com"

},

{

"type": "composer",

"url": "https://packages.example.com",

"options": {

"ssl": {

"verify_peer": "true"

}

}

},

{

"type": "vcs",

"url": "https://github.com/Seldaek/monolog"

},

{

"type": "pear",

"url": "http://pear2.php.net"

},

{

"type": "package",

"package": {

"name": "smarty/smarty",

"version": "3.1.7",

"dist": {

"url": "http://www.smarty.net/files/Smarty-3.1.7.zip",

"type": "zip"

},

"source": {

"url": "http://smarty-php.googlecode.com/svn/",

"type": "svn",

"reference": "tags/Smarty_3_1_7/distribution/"

}

}

}

]

}

config:支持一组用于项目的配置选项可选

scripts:允许在安装过程挂载脚本

extra:供scripts使用的额外任意数据,可选

bin:标注一组应被视为二进制脚本的文件,他们会被软链接到(config对象中的)bin-dir 属性所标注的目录,以供其他依赖包调用.

archive:在创建包存档时使用,支持exclude选项,使用.gitignore的语法设置一个需要排除出去的路径列表。

include-path:一个追加到PHP include_path中的列表,不建议

target-dir:定义当前包安装的目标文件夹,在使用PSR-4自动加载后不建议使用。

Composer贴心地定义了一个composer-scheme.json来验证用户定义的composer.json的合法性,使用composer validate即可。

results matching ""

    No results matching ""