Composer 的结构详解
Composer 的结构? ?Root Package(根目录包)? ? ?根目录包就是在你的项目的根目录由 composer.json 定义的包。主要就是由 composer.json 来定义你的项目的依赖。 ? ?composer.json 中的各个属性(字段)
? ?Composer 支持 3 种类型:
? ?homepage
? ?time
? ?license
? ?authors包的作者。是个对象数组。每个 author 对象有这些属性: name:作者名字
email:作者邮箱
homepage:作者网站 URL
role:作者在项目中的角色(如:developer 或 translator)
? ?support各种关于该项目如何获取支持的信息。包含这些属性: email:获取支持的邮箱
issues:问题跟踪的 URL
forum:论坛的 URL
wiki:Wiki 的 URL
irc:IRC 的频道
source:查看或下载源码的 URL
可选。
? ?Package links? ? ?依赖包的映射表,由包名映射版本约束。如: { "require": { "monolog/monolog": "1.0.*" } } ? ?require列出包所依赖的包。? ? ?除非这些依赖已经存在,否则这个包不会被安装。 ? ?require-dev(root-only)列出开发这个包(或跑测试等等)所依赖的包。? ? ?在使用 install 命令时,只有带上 “–dev” 参数才能安装 dev 包。在使用 update 命令时,带上 “–no-dev” 则不更新。 ? ?conflict列出包会和哪些包发生冲突。? ? ?它们将不被允许和你的包一起安装。如果约束了版本,则只会针对特定的版本。 ? ?replace列出哪些包要被这个包替代。? ?provide这个包所推荐的包列表。? ? ?这个对公共接口最有用,一个包可以依赖一个虚拟的 logger 包,而实现 logger 接口的库可以放到 provide 字段中。 ? ?suggest建议一些能让这个包工作的更好或得到增强的包列表。? ? ?这些信息只在包安装完成时给出,暗示用户可以添加更多包,虽然不是必须要安装的。 { "suggest": { "monolog/monolog": "Allows more advanced logging of the application flow" } } ? ?autoload? ? ?提供给 PHP autoloader 的自动加载映射。 ? ? (1)PSR-0 { "autoload": { "psr-0": { "Monolog": "src/","VendorNamespace": "src/","Vendor_Namespace_": "src/" } } } ? ? ?如果你需要在多个目录里查找同一个前缀的命名空间,你可以用数组,如: { "autoload": { "psr-0": { "Monolog": ["src/","lib/"] } } } ? ? ?PSR-0 风格并不局限于加载命名空间的声明的东西,也可以用于类这个层级。当库中只有一个在全局命名空间中的类时,这种方式就能用上。比如你有个 PHP 源文件放在项目的根目录,你可以这样声明: { "autoload": { "psr-0": { "UniqueGlobalClass": "" } } } ? ? ?如果你有个目录下全是用命名空间组织的,你可以用空前缀: { "autoload": { "psr-0": { "": "src/" } } } ? ?(2)Classmap ? ? ?classmap 的引用可以在安装或更新时生成的文件中查看: { "autoload": { "classmap": ["src/","lib/","Something.php"] } } ? ?(3)files ? ? ?如果你确定需要在任何请求中都加载某些文件,你可以使用 files 自动加载机制。对于那些包中有些 PHP 函数但不能自动加载时特别有用。例如: { "autoload": { "files": ["src/MyLibrary/functions.php"] } } ? ?include-path? ? ?(将被弃用,它的功能由 autoload 代替。其实就是设置 include_path,可选) ? ?target-dir? ? ?指定安装目标路径。 ? ? ?如果包的根目录是在命名空间下,自动加载就不正确了,所以才有 target-dir 来解决这个问题。 ? ? ?Symfony 就是个例子。它由很多组件包组成。Yaml 组件是在 ? ? ?SymfonyComponentYaml { "autoload": { "psr-0": { "SymfonyComponentYaml": "" } },"target-dir": "Symfony/Component/Yaml" } ? ?minimum-stability(root-only)? ? ?定义根据稳定性如何过滤包。默认是 stable,如果你信赖一个 dev 包,你需要指明。 ? ?prefer-stable(root-only)? ? ?如果开启,Composer 会在稳定包和不稳定包中选择前者。 ? ?repositories(root-only)? ? ?定制包的仓库地址。 ? ? ?默认的,Composer 只使用 Packagist 仓库。通过指定仓库地址,你可以从任何地方获取包。 ? ? ?仓库不能递归。你只能将它们添加到主的 composer.json 中。所依赖包中 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(root-only)? ? ?针对项目的一些配置:process-timeout:默认 300 秒,Composer 进程执行超时时间; use-include-path:默认 false,如果是 true,Composer 自动加载器也会到 PHP 的 include_path 中查找; preferred-install:默认 auto,设置 Composer 安装方式; github-protocols:默认 [“git”,“https”],设置与 github 通信协议; github-oauth:设置 oauth; vendor-dir:默认 vendor,你可以换成别的; bin-dir:默认 vendor/bin,如果项目有二进制文件,会链接到这; cache-dir:默认 $home/cache,存放 Composer 运行时产生的缓存; cache-files-dir:默认 $cache-dir/files,存放包的 zip 文件; cache-repo-dir:默认 $cache-dir/repo,存放仓库元数据; cache-vcs-dir:默认 $cache-dir/vcs,存放 vcs 克隆; cache-files-ttl:默认六个月,缓存的过期时间; cache-files-maxsize:默认 300M; notify-no-install:默认 true,从仓库安装包会有个通知,可以关掉; discard-changes:默认false,如何处理脏的更新;
{ "archive": { "exclude": ["/foo/bar","baz","/*.test","!/foo/bar/baz"] } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |