PHPer 需要了解的 5 个 Composer 小技巧

2015-01-04  来源:本站原创  分类:php技巧  人气:1 

本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便。

Composer是新一代的PHP依赖管理工具。其介绍和基本用法可以看这篇《PHP管理依赖(dependency)关系工具 Composer 安装与使用》。本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便。

1. 仅更新单个库

只想更新某个特定的库,不想更新它的所有依赖,很简单:

composer update foo/bar

此外,这个技巧还可以用来解决“警告信息问题”。你一定见过这样的警告信息:

Warning: The lock file is not up to date with the latest changes in composer.json, you may be getting outdated dependencies, run update to update them.

擦,哪里出问题了?别惊慌!如果你编辑了composer.json,你应该会看到这样的信息。比如,如果你增加或更新了细节信息,比如库的描述、作者、更多参数,甚至仅仅增加了一个空格,都会改变文件的md5sum。然后Composer就会警告你哈希值和composer.lock中记载的不同。

那么我们该怎么办呢?update命令可以更新lock文件,但是如果仅仅增加了一些描述,应该是不打算更新任何库。这种情况下,只需update nothing:

$ composer update nothing
Loading composer repositories with package information
Updating dependencies
Nothing to install or update
Writing lock file
Generating autoload files

这样一来,Composer不会更新库,但是会更新composer.lock。注意nothing并不是update命令的关键字。只是没有nothing 这个包导致的结果。如果你输入foobar,结果也一样。

如果你用的Composer版本足够新,那么你可以直接使用--lock选项:

composer update --lock

2. 不编辑composer.json的情况下安装库

你可能会觉得每安装一个库都需要修改composer.json太麻烦,那么你可以直接使用require命令。

composer require "foo/bar:1.0.0"

这个方法也可以用来快速地新开一个项目。init命令有--require选项,可以自动编写composer.json:(注意我们使用-n,这样就不用回答问题)

$ composer init --require=foo/bar:1.0.0 -n
$ cat composer.json
{
  "require": {
    "foo/bar": "1.0.0"
  }
}

3. 派生很容易

初始化的时候,你试过create-project命令么?

composer create-project doctrine/orm path 2.2.0

这会自动克隆仓库,并检出指定的版本。克隆库的时候用这个命令很方便,不需要搜寻原始的URI了。

4. 考虑缓存,dist包优先

最近一年以来的Composer会自动存档你下载的dist包。默认设置下,dist包用于加了tag的版本,例如"symfony/symfony": "v2.1.4",或者是通配符或版本区间,"2.1.*"或">=2.2,<2.3-dev"(如果你使用stable作为你的minimum-stability。

dist包也可以用于诸如dev-master之类的分支,Github允许你下载某个git引用的压缩包。为了强制使用压缩包,而不是克隆源代码,你可以使用install和update的--prefer-dist选项。

下面是一个例子(我使用了--profile选项来显示执行时间):

$ composer init --require="twig/twig:1.*" -n --profile
Memory usage: 3.94MB (peak: 4.08MB), time: 0s

$ composer install --profile
Loading composer repositories with package information
Installing dependencies
 - Installing twig/twig (v1.12.2)
  Downloading: 100%

Writing lock file
Generating autoload files
Memory usage: 10.13MB (peak: 12.65MB), time: 4.71s

$ rm -rf vendor

$ composer install --profile
Loading composer repositories with package information
Installing dependencies from lock file
 - Installing twig/twig (v1.12.2)
  Loading from cache

Generating autoload files
Memory usage: 4.96MB (peak: 5.57MB), time: 0.45s

这里,twig/twig:1.12.2的压缩包被保存在~/.composer/cache/files/twig/twig/1.12.2.0-v1.12.2.zip。重新安装包时直接使用。

5. 考虑修改,源代码优先

当你需要修改库的时候,克隆源代码就比下载包方便了。你可以使用--prefer-source来强制选择克隆源代码。

composer update symfony/yaml --prefer-source

接下来你可以修改文件:

composer status -v
You have changes in the following dependencies:
/path/to/app/vendor/symfony/yaml/Symfony/Component/Yaml:
  M Dumper.php

当你试图更新一个修改过的库的时候,Composer会提醒你,询问是否放弃修改:

$ composer update
Loading composer repositories with package information
Updating dependencies
 - Updating symfony/symfony v2.2.0 (v2.2.0- => v2.2.0)
  The package has modified files:
  M Dumper.php
  Discard changes [y,n,v,s,?]?

为生产环境作准备

最后提醒一下,在部署代码到生产环境的时候,别忘了优化一下自动加载:

composer dump-autoload --optimize

安装包的时候可以同样使用--optimize-autoloader。不加这一选项,你可能会发现20%到25%的性能损失。

如果你需要帮助,或者想要了解某个命令的细节,你可以阅读官方文档,或者查看JoliCode做的这个交互式备忘单。

相关文章
  • PHPer 需要了解的 5 个 Composer 小技巧 2015-01-04

    本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. Composer是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<PHP管理依赖(dependency)关系工具 Composer 安装与使用>.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单: composer update foo/bar 此外,这个技巧还可以用来解决"警告信息问题".你一

  • PHP小技巧搜集,每个PHPer都来露一手 2014-03-31

    这个帖子主要是所有的PHPers把自己在开发或学习中的一些经验技巧进行总结,主要就是把解决某种事情更好的方法告诉大家. 我先说几个: 1,假如你使用echo输出一个简单的语句,类似与: <?php echo "Hello World!"; ?> 那么你可以偷懒一下,写成这样: <?="Hello World!";?> 2,str_replace()可以使用数组进行替换,比如: 复制代码 代码如下: <? $string = "

  • php小技巧之过滤ascii控制字符 2013-10-01

    分享一个小技巧,在PHP中如何过滤ascii控制字符,需要的朋友可以参考下 还记得以前在工作中,将爬来的其它网站的数据导到xml.但是会遇到一个问题:即网页会有ascII的控制字符.一开始以为是别人为了防止采集而加入的,然后发现一个就往过滤表里加一个.直到慢慢发现,他们都是ascii表里的字符.找到原因了,就好解决了. /** * 根据ascii码过滤控制字符 * @param type $string */ public static function special_filter($stri

  • PowerShell小技巧之查找获取注册表路径 2013-10-06

    这篇文章主要介绍了在PowerShell中使用递归查找获取注册表路径的小技巧,有需要的朋友可以参考下 在先前的技巧中我们说明如何将一个PS内置的路径格式转化成一个实际路径.这里介绍了一个例子.这段代码递归从HKEY_CURRENT_USER获取所有包含"powershell"词缀的键(简单的替换查询词缀将能获得你想要查询的任何东西) Get-ChildItem -Path HKCU:\ -Include *PowerShell* -Recurse -ErrorAction Silent

  • div+css页面布局的五个小技巧 2013-10-07

    div css表单布局的五个小技巧可以帮助你更灵活的控制表单,使页面更加满意. 1.表单文本输入的移动选择: 在文本输入栏中,如果加入了提示,来访者往往要用鼠标选取后删除,再输入有用的信息.其实只要加入onMouseOver="this.focus()" onFocus="this.select()" 代码到 <textarea> 中,一切就会变得简单多了,如: <textarea name=textarea wrap=virtual rows=2

  • Win7常用小技巧总结 2013-10-08

    以下是本人平时使用及总结的一些小技巧,其实Win7的快捷键组合功能有很多,咱只学最最实用的.如果你也有同样的小技巧,就拿出来大家一起分享吧. Win7的使用时间还比较短,暂时就发现这几个比较有用的,有新发现后会随时更新的 一.Windows键 + 空格键"Space" [作用]:透明化所有窗口,快速查看桌面(并不切换) [快捷键]:win+空格 [小结]:当你打开了很多程序窗口的时候,这招非常有用,而且桌面还会有华丽的光影效果哦.没用过的赶紧试试先 二.Windows键 + D [作用

  • Python返回真假值(True or False)小技巧 2013-10-09

    这篇文章主要介绍了Python返回真假值(True or False)小技巧,本文探讨的是最简洁的条件判断语句写法,本文给出了两种简洁写法,需要的朋友可以参考下 在昨天关于substring的blog中有如下一段代码: 也许你已经发现,在Python 3中其实有办法只用一行完成函数: >>> def isSubstring2(s1,s2): return True if s2.find(s1)!=-1 else False 但是...还可以更简单吗? 如何更简单使用Python表达条件语

  • 小技巧:加强你的工作区,预防生产环境误操作 2013-10-18

    我会分享一系列开发生涯中所积累的有用且容易实现的小技巧,本文是此系列的第二篇. 想象你正在开车,突然有一辆车插队到你前面,你会马上踩刹车来避免事故发生,在这个紧张的时刻你会先去想刹车在哪边么?可能不会.通过以往不断地重复你的大脑已经完全知道刹车在哪边,这一点不止在紧急情况下很有用,在日常生活中也一样.如果人们经常混淆油门和刹车的位置,开车将是一件非常危险的事情! 我认为这种情况同样适用于开发工作区.你经历过把生产环境当做开发服务器而去运行了一条命令么?你有过错把线上网站当做本地版本去执行了一些操

  • Python中Collection的使用小技巧 2013-10-31

    这篇文章主要介绍了Python中Collection的使用小技巧,对初学者来说有不错的学习借鉴价值,需要的朋友可以参考下 本文所述实例来自独立软件开发者 Alex Marandon,在他的博客中曾介绍了数个关于 Python Collection 的实用小技巧,在此与大家分享.供大家学习借鉴之用.具体如下: 1.判断一个 list 是否为空 传统的方式: if len(mylist): # Do something with my list else: # The list is empty 由

  • Windows系统保密小技巧 2013-11-01

    计算机的智能化既给我们带来了极大的方便,也埋下了泄密的导火索,一旦别人使用或入侵你的计算机,通过简单的查找就会发现大量信息,如已被你删除的收到和发出的邮件.访问过的Internet网站.在网页表单中输入的数据.密码及个人信息,甚至在文档中使用过的词汇等.因此,掌握一些保密技巧,保护隐私不受侵扰就显得尤为重要.下面的一些小技巧将助你营造一个更加安全的操作环境. 关闭显示最近所用文件功能 即使入侵者无法直接浏览你处理过的文档的内容,也能通过在Word或Excel的"文件"菜单中查看你最近使

  • Lua中创建全局变量的小技巧(禁止未预期的全局变量) 2013-11-02

    这篇文章主要介绍了Lua中创建全局变量的小技巧(禁止未预期的全局变量),使用本文方法可以实现避免创建全局变量,在必须使用全局变量的情况下也给出了实现技巧,需要的朋友可以参考下 Lua 有一个特性就是默认定义的变量都是全局的.为了避免这一点,我们需要在定义变量时使用 local 关键字. 但难免会出现遗忘的情况,这时候出现的一些 bug 是很难查找的.所以我们可以采取一点小技巧,改变创建全局变量的方式. local __g = _G -- export global variable cc.exp

  • 17个Python小技巧分享 2013-11-10

    这篇文章主要给大家分享了17个Python小技巧,都是些基础的非常常用也非常实用的小技巧,这里推荐给大家. 1.交换变量 x = 6 y = 5 x, y = y, x print x >>> 5 print y >>> 6 2.if 语句在行内 复制代码 代码如下: print "Hello" if True else "World" >>> Hello 3.连接 下面的最后一种方式在绑定两个不同类型的对象时显

  • PowerShell入门教程之高效使用PowerShell交互式运行环境的几个小技巧 2013-11-14

    这篇文章主要介绍了PowerShell入门教程之高效使用PowerShell交互式运行环境的几个小技巧,本文也可以说是使用PowerShell的一些好习惯,需要的朋友可以参考下 在开始关于脚本.对象和远程处理等复杂的功能之前,一直想再写一篇关于交互式运行环境的文章.因为我觉得这很重要,但是有什么是不重要呢?:)所以,说到底可能是个人喜好吧,我就是特别喜欢这种立等可取的交互方式. 如何高效地使用PowerShell的交互式运行环境呢?所谓"高效",既跟使用这个工具的熟练程度有关,也跟使用

  • 35个Python编程小技巧 2013-11-15

    从我开始学习python的时候,我就开始自己总结一个python小技巧的集合.后来当我什么时候在Stack Overflow或者在某个开源软件里看到一段很酷代码的时候,我就很惊讶:原来还能这么做!,当时我会努力的自己尝试一下这段代码,直到我懂了它的整体思路以后,我就把这段代码加到我的集合里 这篇博客其实就是这个集合整理后一部分的公开亮相.如果你已经是个python大牛,那么基本上你应该知道这里面的大多数用法了,但我想你应该也能发现一些你不知道的新技巧.而如果你之前是一个c,c++,java的程序

  • JAVA中使用双括号来初始化静态常量的小技巧 2013-11-16

    这篇文章主要介绍了JAVA中使用双括号来初始化静态常量的小技巧,需要的朋友可以参考下 这貌似是个不为人知的语言技巧.我看到一般人写Java里初始化静态常量都是 public static final Map<String, String> DATA = new TreeMap<String, String>(); static { DATA.put("a", "A"); //blah blah blah } 使用所在类的static块来初始化

  • Python中AND.OR的一个使用小技巧 2013-11-24

    这篇文章主要介绍了Python中AND.OR的一个使用小技巧,需要的朋友可以参考下 python中的and-or可以用来当作c用的?:用法.比如 1 and a or b,但是需要确保a为True,否则a为False,还要继续判断b的值,最后打印b的值. 今天看到一个好方法避免这种情况,记录一下: (1 and [a] or [b])[0] 可以保证[a]为True.

  • PowerShell小技巧之获取Windows系统密码Hash 2013-11-26

    这篇文章主要介绍了使用PowerShell获取Windows系统密码Hash的小技巧,非常的实用,需要的朋友可以参考下 当你拿到了系统控制权之后如何才能更长的时间内控制已经拿到这台机器呢?作为白帽子,已经在对手防线上撕开一个口子,如果你需要进一步扩大战果,你首先需要做的就是潜伏下来,收集更多的信息便于你判断,便于有更大的收获.用什么方法才能有尽可能高的权限,同时能更有效的隐藏自己,是留webshell,留后门,种木马还是Rootkit?webshell,哪怕是一句话木马都很容易被管理员清除,放了

  • php eval函数用法 PHP中eval()函数小技巧 2013-11-27

    本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上 eval 将值代入字符串之中. 语法: void eval(string code_str); 传回值: 无 函式种类: 数据处理 内容说明 本函式可将字符串之中的变量值代入,通常用在处理数据库的数据上.参数 code_str 为欲处理的字符串.值得注意的是待处理的字符串要符合 PHP 的字符串格式,同时在结尾处要有分号.使用本函式处理后的字符串会沿续到 PHP 程序结束. 使用范例 <?php $string = '杯子'; $na

  • Powershell小技巧之获取MAC地址 2013-12-03

    这篇文章主要介绍了Powershell获取MAC地址的小技巧,非常简单实用,有需要的朋友可以参考下 在Powershell中获取MAC地址不是很难.这里就有一种方法: PS> getmac /FO CSV | ConvertFrom-Csv Physical Address Transport Name ---------------- -------------- 5C-51-4F-62-F2-7D \Device\Tcpip_{FF034A81-CBFE-4B11-9D... 5C-51-4

  • Windows操作系统保密小技巧 2013-12-08

    计算机的智能化既给我们带来了极大的方便,也埋下了泄密的导火索,一旦别人使用或入侵你的计算机,通过简单的查找就会发现大量信息,如已被你删除的收到和发出的邮件.访问过的Internet网站.在网页表单中输入的数据.密码及个人信息,甚至在文档中使用过的词汇等.因此,掌握一些保密技巧,保护隐私不受侵扰就显得尤为重要.下面的一些小技巧将助你营造一个更加安全的操作环境. 关闭显示最近所用文件功能 即使入侵者无法直接浏览你处理过的文档的内容,也能通过在Word或Excel的"文件"菜单中查看你最近使