“Composer”的版本间的差异
(→composer.json) |
(→Root 包) |
||
第189行: | 第189行: | ||
一个资源包是不是“root包”,取决于它的上下文。 例:如果你的项目依赖monolog库,那么你的项目就是“root包”。 但是,如果你从GitHub上克隆了monolog为它修复bug, 那么此时monolog就是“root包”。 | 一个资源包是不是“root包”,取决于它的上下文。 例:如果你的项目依赖monolog库,那么你的项目就是“root包”。 但是,如果你从GitHub上克隆了monolog为它修复bug, 那么此时monolog就是“root包”。 | ||
+ | |||
+ | ===属性=== | ||
+ | |||
+ | ====包名 name==== | ||
+ | |||
+ | 包的名称,它包括供应商名称和项目名称,使用 / 分隔。例: | ||
+ | |||
+ | <source lang="json"> | ||
+ | monolog/monolog | ||
+ | igorw/event-source | ||
+ | </source> | ||
+ | |||
+ | 对于需要发布的包(库),这是必须填写的。 | ||
+ | |||
+ | ====描述 description==== | ||
+ | |||
+ | 一个包的简短描述。通常这个最长只有一行。对于需要发布的包(库),这是必须填写的。 | ||
==使用问题== | ==使用问题== |
2017年10月25日 (三) 08:36的版本
简介
Composer是PHP的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。
Composer在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。
除了库的下载,Composer 还准备了一个自动加载文件,它可以加载 Composer 下载的库中所有的类文件。使用它,你只需要将下面这行代码添加到你项目的引导文件中:
require 'vendor/autoload.php';
安装
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer
现在只需要运行composer命令就可以使用Composer而不需要输入php composer.phar。
基本用法
要开始在你的项目中使用 Composer,你只需要一个 composer.json 文件。
包版本
名称 | 实例 | 描述 |
---|---|---|
确切的版本号 | 1.0.2 | 你可以指定包的确切版本。 |
范围 | >=1.0
>=1.0,<2.0 >=1.0,<1.1|>=1.2 |
通过使用比较操作符可以指定有效的版本范围。 有效的运算符:>、>=、<、<=、!=。
你可以定义多个范围,用逗号隔开,这将被视为一个逻辑AND处理。一个管道符号|将作为逻辑OR处理。 AND的优先级高于OR。 |
通配符 | 1.0.* | 你可以使用通配符*来指定一种模式。1.0.*与>=1.0,<1.1是等效的。 |
赋值运算符 | ~1.2 | 下一个重要版本(波浪号运算符)。~1.2相当于>=1.2,<2.0。 |
安装依赖包
获取定义的依赖到你的本地项目,只需要调用install命令。
php composer.phar install
接着前面的例子,这将会找到monolog/monolog的最新版本,并将它下载到vendor目录。
小技巧: 如果你正在使用Git来管理你的项目, 你可能要添加vendor到你的.gitignore文件中。 你不会希望将所有的代码都添加到你的版本库中。
另一件事是install命令将创建一个composer.lock文件到你项目的根目录中。
composer.lock - 锁文件
在安装依赖后,Composer将把安装时确切的版本号列表写入composer.lock文件。
请提交你应用程序的 composer.lock(包括composer.json)到你的版本库中。install命令将会检查锁文件是否存在,如果存在,它将下载指定的版本(忽略composer.json文件中的定义)。
这意味着,任何人建立项目都将下载与指定版本完全相同的依赖。你的持续集成服务器、生产环境、你团队中的其他开发人员、每件事、每个人都使用相同的依赖,从而减轻潜在的错误对部署的影响。即使你独自开发项目,在六个月内重新安装项目时,你也可以放心的继续工作,即使从那时起你的依赖已经发布了许多新的版本。
如果不存在composer.lock文件,install命令将读取composer.json并创建锁文件。
要更新你的依赖版本请使用update命令。这将获取最新匹配的版本(根据你的composer.json文件)并将新版本更新进锁文件。
php composer.phar update
如果只想安装或更新一个依赖,你可以白名单它们:
php composer.phar update monolog/monolog [...]
命令行
安装 install
install命令从当前目录读取composer.json文件,处理了依赖关系,并把其安装到vendor目录下。
php composer.phar install
如果当前目录下存在composer.lock文件,它会从此文件读取依赖版本,而不是根据composer.json文件去获取依赖。这确保了该库的每个使用者都能得到相同的依赖版本。
如果没有composer.lock文件,composer将在处理完依赖关系后创建它。
更新 update
为了获取依赖的最新版本,并且升级composer.lock文件,你应该使用update命令。
php composer.phar update
这将解决项目的所有依赖,并将确切的版本号写入composer.lock。
如果你只是想更新几个包,你可以像这样分别列出它们:
php composer.phar update vendor/package vendor/package2
你还可以使用通配符进行批量更新:
php composer.phar update vendor/*
申明依赖 require
require命令增加新的依赖包到当前目录的composer.json文件中。
php composer.phar require
在添加或改变依赖时, 修改后的依赖关系将被安装或者更新。
如果你不希望通过交互来指定依赖包,你可以在这条令中直接指明依赖包。
php composer.phar require vendor/package:2.* vendor/package2:dev-master
有效性检测 validate
在提交composer.json文件,和创建tag前,你应该始终运行validate命令。它将检测你的composer.json文件是否是有效的
php composer.phar validate
自我更新 self-update
将Composer自身升级到最新版本,只需要运行self-update命令。它将替换你的composer.phar文件到最新版本。
php composer.phar self-update
如果你想要升级到一个特定的版本,可以这样简单的指定它:
php composer.phar self-update 1.0.0-alpha7
创建项目 create-project
你可以使用Composer从现有的包中创建一个新的项目。这相当于执行了一个git clone或svn checkout命令后将这个包的依赖安装到它自己的vendor目录。
此命令有几个常见的用途:
- 你可以快速的部署你的应用。
- 你可以检出任何资源包,并开发它的补丁。
- 多人开发项目,可以用它来加快应用的初始化。
要创建基于Composer的新项目,你可以使用"create-project"命令。传递一个包名,它会为你创建项目的目录。你也可以在第三个参数中指定版本号,否则将获取最新的版本。
如果该目录目前不存在,则会在安装过程中自动创建。
php composer.phar create-project doctrine/orm path 2.2.*
此外,你也可以无需使用这个命令,而是通过现有的composer.json文件来启动这个项目。
默认情况下,这个命令会在packagist.org上查找你指定的包。
composer.json
Root 包
某些字段仅适用于“root包”上下文。 config字段就是其中一个例子。只有“root包”可以定义,在依赖包中定义的config字段将被忽略。
一个资源包是不是“root包”,取决于它的上下文。 例:如果你的项目依赖monolog库,那么你的项目就是“root包”。 但是,如果你从GitHub上克隆了monolog为它修复bug, 那么此时monolog就是“root包”。
属性
包名 name
包的名称,它包括供应商名称和项目名称,使用 / 分隔。例:
无效的语言。
您需要指定一种语言,像这样: <source lang="html4strict">...</source>
语法高亮所支持的语言:
4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic
monolog/monolog igorw/event-source
对于需要发布的包(库),这是必须填写的。
描述 description
一个包的简短描述。通常这个最长只有一行。对于需要发布的包(库),这是必须填写的。
使用问题
Could not parse version constraint ^1.0: Invalid version string "^1.0"
表面原因是phpunit的版本号使用了^,而composer不支持,导致更新失败。在2014年12月composer已经添加了对^的支持,PHPUnit从2015年1月开始使用^,一次更新一下composer的版本即可解决问题。 composer版本太老了,执行下面命令进行更新。
$sudo composer self-update #权限足够可以不加sudo
常用命令
#安装组件 composer require predis/predis