PHP的Composer 与 Packagist,简单入门
【转】http://www.php.cn/manual/view/34000.html
Composer 是一个 杰出 的依赖管理器。在 composer.json 文件中列出你项目所需的依赖包,加上一点简单的命令,Composer 将会自动帮你下载依赖包并设置自动加载。Composer 可以类比为 node.js 世界的 NPM 或 Ruby 世界的 Bundler。
现在已经有许多 PHP 第三方包已兼容 Composer,随时可以在你的项目中使用。这些 “包(package)” 都已列在 Packagist 上了,这是一个官方的 Composer 兼容包仓库。
如何安装 Composer
按照官方指导 下载 Composer 的最安全的方式。 这种方式在安装过程中会检验安装脚本不被损坏或篡改。 安装脚本默认是将 Composer 安装到当前项目的 本地 目录下面。
我们建议将 Composer 安装到 全局 环境中(例如复制到 /usr/local/bin 目录),如下:
mv composer.phar /usr/local/bin/composer
注意: 如果上述过程失败是由于权限的原因,请重新执行 mv 并在此指令前面添加 sudo。
运行本地安装的 Composer 使用 php composer.phar 命令;运行全局安装的 Composer 直接使用 composer 命令。
Windows环境下安装
对于Windows 的用户而言最简单的获取及执行方法就是使用 ComposerSetup安装程序,它会执行一个全局安装并设置你的 $PATH,所以你在任意目录下在命令行中使用 composer。
如何手动安装 Composer
手动安装 Composer 是一个复杂的技术活儿,仅管如此还是有许多开发者有各种原因喜欢使用这种交互式的应用程序安装 Composer。在安装前请先确认你的PHP安装项目如下:
正在使用一个满足条件的 PHP 版本
.phar 文件可以正确的被执行
相关的目录有足够的权限
相关有问题的扩展没有被载入
相关的 php.ini 设置已完成
由于手动安装没有执行这些检查,你必须自已衡量决定是否值得做这些事,以下是如何手动安装 Composer :
curl -s https://getcomposer.org/composer.phar -o $HOME/local/bin/composer chmod +x $HOME/local/bin/composer
路径 $HOME/local/bin (或是你选择的路径) 应该在你的 $PATH 环境变量中。这将会影响 composer 这个命令是否可用.
当你遇到文档指出执行 Composer 的命令是 php composer.phar install时,你可以使用下面命令替代:
composer install
本章节会假设你已经安装了全局的 Composer。
如何设置及安装依赖
Composer 会通过一个 composer.json 文件持续的追踪你的项目依赖。 如果你喜欢,你可以手动管理这个文件,或是使用 Composer 自己管理。composer require 这个指令会增加一个项目依赖,如果你还没有 composer.json 文件, 将会创建一个。这里有个例子为你的项目加入 Twig 依赖。
composer require twig/twig:~1.8
另外,composer init 命令将会引导你创建一个完整的 composer.json 文件到你的项目之中。无论你使用哪种方式,一旦你创建了 composer.json 文件,你可以告诉 Composer 去下载及安装你的依赖到 vendor/ 目录中。此命令也适用于你所下载的已经带有 composer.json 文件的项目:
composer install
接下来,添加这一行到你应用的主要 PHP 文件中,这将会告诉 PHP 为你的项目依赖使用 Composer 的自动加载器。
<?php
require 'vendor/autoload.php';
现在你可以使用你项目中的依赖,且它们会在需要时自动完成加载。
更新你的依赖
Composer 会建立一个 composer.lock 文件,在你第一次执行 composer install 时,保存下载的每个依赖包的准确的版本号。假如你要分享你的项目给其他开发者,并且 composer.lock 文件也在你分享的文件之中的话。 当他们执行 composer install 这个命令时,他们将会得到与你一样的依赖版本。当你要更新你的依赖时请执行 composer update。部署项目时只使用 composer install而不要使用 composer update 命令,否则再生产环境上安装的依赖和你预期的不一致。(注:这个测试了,并没有发现有什么区别,可能是还不够深入吧)
当你需要灵活的定义你所需要的依赖版本时,这是最有用。 例如,~1.8 表示 “任何大于 1.8.0,但小于 2.0.x-dev 的版本”。你也可以使用通配符 * 在 1.8.* 之中。现在 Composer 在执行 composer update 时将升级你的所有依赖到你限制的最新版本。
更新通知
要接收关于新版本的更新通知。你可以注册 VersionEye,这个 web 服务可以监控你的 Github 及 BitBucket 帐号中的 composer.json 文件,并且当包有新更新时会发送邮件给你。
检查你的依赖安全问题
Security Advisories Checker 是一个 web 服务和一个命令行工具,二者都会仔细检查你的 composer.lock 文件,并且告诉你任何你需要更新的依赖。
处理 Composer 全局依赖
Composer 也可以处理全局依赖和他们的二进制文件。用法很直接,你所要做的就是在命令前加上 global 前缀。如果你想安装 PHPUnit 并使它全局可用,你可以运行下面的命令:
composer global require phpunit/phpunit
这将会创建一个 ~/.composer 目录存放全局依赖,要让已安装依赖的二进制命令随处可用,你需要添加 ~/.composer/vendor/bin 目录到你的 $PATH 变量。
扫二维码,关注更多PHP资讯!
PHP的Composer 与 Packagist,简单入门的更多相关文章
- 用IntelliJ IDEA创建Gradle项目简单入门
Gradle和Maven一样,是Java用得最多的构建工具之一,在Maven之前,解决jar包引用的问题真是令人抓狂,有了Maven后日子就好过起来了,而现在又有了Gradle,Maven有的功能它都 ...
- [原创]MYSQL的简单入门
MYSQL简单入门: 查询库名称:show databases; information_schema mysql test 2:创建库 create database 库名 DEFAULT CHAR ...
- Okio 1.9简单入门
Okio 1.9简单入门 Okio库是由square公司开发的,补充了java.io和java.nio的不足,更加方便,快速的访问.存储和处理你的数据.而OkHttp的底层也使用该库作为支持. 该库极 ...
- emacs最简单入门,只要10分钟
macs最简单入门,只要10分钟 windwiny @2013 无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...
- 【java开发系列】—— spring简单入门示例
1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转 ...
- Docker 简单入门
Docker 简单入门 http://blog.csdn.net/samxx8/article/details/38946737
- Springmvc整合tiles框架简单入门示例(maven)
Springmvc整合tiles框架简单入门示例(maven) 本教程基于Springmvc,spring mvc和maven怎么弄就不具体说了,这边就只简单说tiles框架的整合. 先贴上源码(免积 ...
- git简单入门
git简单入门 标签(空格分隔): git git是作为程序员必备的技能.在这里就不去介绍版本控制和git产生的历史了. 首先看看常用的git命令: git init git add git comm ...
- 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2
本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
随机推荐
- flask系列三之Jinja2模板
1.如何渲染模板 模板在‘templates’文件夹下(htnl页面) 从flask中导入render_template函数---渲染html模板 在视图函数中,使用render_template 函 ...
- 14-jQuery的ajax
什么是ajax AJAX = 异步的JavaScript 和 XML (Asynchronous Javascript and XML) 简言之,在不重载整个网页的情况下,AJAX通过后台加载数据 ...
- MySql主从复制原理和环境配置搭建
主从复制原理 实质就是通过二进制的sql文件实现主从复制 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlo ...
- ubuntu安装Docky 3.0
添加PPA并在命令行安装,执行以下命令: sudo add-apt-repository ppa:ricotz/docky sudo apt-get update sudo apt-get insta ...
- redis实现发布订阅
订阅者 #!/usr/bin/env python # -*- coding:utf-8 -*- import redis r = redis.Redis(host='192.168.11.119') ...
- 【bzoj2190】[SDOI2008]仪仗队
2190: [SDOI2008]仪仗队 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2638 Solved: 1674[Submit][Statu ...
- 安装gdb insight(6.8.1)
如果之前安装过6.8或其它版本,请先删除以下目录 rm -rf /usr/local/insight rm -rf /usr/share/tcltk 如果之前设置过环境变量,也请删除 unset TC ...
- validate 不校验的解决办法
最近使用validate.js用于项目的表单校验,调了半天,怎么都不校验,仔细对照例子发现 例子中要校验的文本框除了ID外还有name属性,而我在做的时候没有name属性,到这里终于 看到了希望,把所 ...
- Python04 range()方法的使用、turtle.textinput()方法和write()的使用、turtle.numinput()的使用
1 range() 方法的使用 1.1 range方法介绍 range方法会返回一个range类型的对象,该对象会根据range方法的参数产生一些列整型数据 技巧01:range方法有三个参数,第一个 ...
- Mask_RCNN openpose AlphaPose Kinect姿态识别
1.Mask_RCNN ---------------------------------------------------------------------------------------- ...