如何正确使用 Composer 安装 Laravel 扩展包

如何正确使用 Composer 安装 Laravel 扩展包,第1张

安装的是 monolog 1.1 版本,而一个多月以后的现在,monolog 已经是 1.2 了,运行命令后直接更新到 1.2,这时项目并没有针对 1.2 进行过测试,项目一下子变得很不稳定,情况有时候会比这个更糟糕,尤其是在一个庞大的项目中,你没有对项目写完整覆盖测试的情况,什么东西坏掉了你都不知道。

那应该使用哪个命令呢?install, update 还是 require ?

接下来我们一一解释。

简单解释

composer install - 如有 composer.lock 文件,直接安装,否则从 composer.json 安装最新扩展包和依赖;

composer update - 从 composer.json 安装最新扩展包和依赖;

composer update vendor/package - 从 composer.json 或者对应包的配置,并更新到最新;

composer require new/package - 添加安装 new/package , 可以指定版本,如: composer require new/package ~2.5.

CentOS7下安装Composer安装Composer1、将composer.phar下载到项目中使用curl-sShttps://getcomposer.org/installer|php下载Composer的二进制文件,是一个PHAR包(PHP的归档)2、可以通过--install-dir选项指定Composer的安装目录(它可以是一个绝对或相对路径):curl-sShttps://getcomposer.org/installer|php----install-dir=lumen3、如果把composer.phar放在系统的PATH目录中,就能在全局访问composer.phar。在类Unix系统中,你甚至可以在使用时不加php前缀。可以执行这些命令让composer在你的系统中进行全局调用:#mvcomposer.phar/usr/local/bin/composer现在只需要运行composer命令就可以使用Composer而不需要输入phpcomposer.phar。4、检查Composer是否正常工作,只需要通过php来执行PHAR:phpcomposer.phar这将返回给你一个可执行的命令列表。使用Composer要在项目中使用Composer,只需要一个composer.json文件。该文件包含了项目的依赖和其它的一些元数据。现在使用Composer来安装项目的依赖。1、创建composer.json文件在当前目录下创建composer.json文件,在composer.json文件中指定requirekey的值。简单的告诉Composer你的项目需要依赖哪些包。例如:{"require":{"monolog/monolog":"1.0.*"}}可以看到,require需要一个包名称monolog/monolog映射到包版本1.0.*的对象。包名称由供应商名称和其项目名称构成。2、安装依赖包执行install命令获取定义的依赖到本地项目:phpcomposer.pharinstall如果你进行了全局安装,并且没有phar文件在当前目录,使用下面的命令代替:composerinstall这将会找到monolog/monolog的最新版本,并将它下载到vendor目录。这是一个惯例把第三方的代码到一个指定的目录vendor。如果是monolog将会创建vendor/monolog/monolog目录。注意:install命令将创建一个composer.lock文件到你项目的根目录中。3、自动加载除了库的下载,Composer还准备了一个自动加载文件,它可以加载Composer下载的库中所有的类文件。使用它,你只需要将下面这行代码添加到你项目的引导文件中:require'vendor/autoload.php'现在我们就可以使用monolog了

首先让我们踏着欢快的脚步去Github创建一个新库,这里取名 composer-car,又欢快的将它克隆到本地:

git clone https://github.com/GeHou/composer-car.git

cd composer-car

这个composer-car文件夹就是你的包的root目录了,你只需要记住composer.json在包的哪个目录下面,一般那就是包的root目录了。什么?做包子的工作台?这么理解呢也是可以的,不过同学能先收收你的口水么。

现在我们还没有composer.json文件,你可以根据composer文档生成并编辑它,当然composer贴心的为我们准备了命令行,look:

->composer init

Welcome to the Composer config generator

This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [hou/composer-car]: 这里填写<包提供者>/<包名>的信息

Description []: 包的描述

Author [GeHou <***@gmail.com>]: 作者信息

Minimum Stability []: 最低稳定版本

License []: 授权协议

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no

Would you like to define your dev dependencies (require-dev) interactively [yes]? no

{

"name": "hou/composer-car",

"description": "In order to study composer",

"license": "MIT",

"authors": [

{

"name": "GeHou",

"email": "***@gmail.com"

}

],

"minimum-stability": "dev",

"require": {

}

}

Do you confirm generation [yes]? yes

Would you like the vendor directory added to your .gitignore [yes]? yes

虽然经过以上的一番挣扎生成了composer.json文件,不过我们还得往里面加点东西。使用你熟悉的编辑器打开composer.json文件修改至如下:

{

"name": "hou/composer-car",

"description": "In order to study composer",

"license": "MIT",

"authors": [

{

"name": "GeHou",

"email": "***@gmail.com"

}

],

"minimum-stability": "dev",

"require": {

"php": ">=5.3.0"

},

"autoload": {

"psr-4": {

"Ford\\Escape\\": "src/Ford/Escape",

"Ford\\Fusion\\": "src/Ford/Fusion",

"Ford\\Focus\\": "src/Ford/Focus",

"Ford\\Fiesta\\": "src/Ford/Fiesta"

}

}

}

细心的小伙伴可能已经认出了福特的商标(Ford),这说明我们都是同道中人,你一定也很喜欢汽车,对吧对吧? :-)

我们登陆一下福特的网站看看都有哪些热销车型,嗯嗯分别有ESCAPE、FUSION、FOCUS、FIESTA,中文名称分别是翼虎、蒙迪欧、福克斯、嘉年华,嘉年华ST我的梦想啊~~~ 好了好了,那位看官放下你手里的板砖,我承认一说到汽车就会滔滔不绝,下面我们把水分挤出去继续讲解。

根据上面的命名空间和目录的映射关系,包的结构现在应该是下面这个样子:

composer-car

- src

- - Ford

- - - Escape

- - - - Escape2013.php

- - - Fiesta

- - - - Fiesta2013.php

- - - Focus

- - - - Focus2013.php

- - - Fusion

- - - - Fusion2013.php

- .gitignore

- composer.json

- README.md

Escape2013.php:

<?php

namespace Ford\Escape

class Escape2013

{

public static function info()

{

echo "This is Ford Escape2013!<br />"

}

}

Fiesta2013.php:

<?php

namespace Ford\Fiesta

class Fiesta2013

{

public static function info()

{

echo "This is Ford Fiesta2013!<br />"

}

}

Focus2013.php:

<?php

namespace Ford\Focus

class Focus2013

{

public static function info()

{

echo "This is Ford Focus2013!<br />"

}

}

Fusion2013.php:

<?php

namespace Ford\Fusion

class Fusion2013

{

public static function info()

{

echo "This is Ford Fusion2013!<br />"

}

}

以上都梳理完毕后,需要安装composer来测试我们的包是否可以正常工作,安装它很简单在包的root目录下install即可:

composer install

闪过几行神秘的提示之后即安装完毕,此时会在vendor/composer/autoload_psr4.php中生成命名空间和目录的映射关系,被包在一个数组中:

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__))

$baseDir = dirname($vendorDir)

return array(

'Ford\\Fusion\\' =>array($baseDir . '/src/Ford/Fusion'),

'Ford\\Focus\\' =>array($baseDir . '/src/Ford/Focus'),

'Ford\\Fiesta\\' =>array($baseDir . '/src/Ford/Fiesta'),

'Ford\\Escape\\' =>array($baseDir . '/src/Ford/Escape'),

)

如果发布成packagist包然后进行安装的话,到时候这里就不是$baseDir了而是$vendorDir。

然后我们新建一个测试文件show.php,用以下内容填充它:

<?php

require 'vendor/autoload.php'

use Ford\Escape as Escape

use Ford\Fiesta as Fiesta

use Ford\Focus as Focus

use Ford\Fusion as Fusion

echo Escape\Escape2013::info()

echo Fiesta\Fiesta2013::info()

echo Focus\Focus2013::info()

echo Fusion\Fusion2013::info()

打开浏览器敲入 http://foo.com/composer-car/show.php (foo.com是我的本地测试域名,请替换成小伙伴自己的)。

浏览器上依次输出了:

This is Ford Escape2013!

This is Ford Fiesta2013!

This is Ford Focus2013!

This is Ford Fusion2013!

是不是有点小激动呢?别急,别一副作鸟兽散的样子,还有发布的流程呢?不过你要是真的急着wc或者觉得教程too simple,侯哥是不会让你捡肥皂的。

首先作为调试代码的部分我们是不需要push到github上的,所以将show.php打入冷宫,编辑.gitignore文件,在末尾加入show.php。这个时候有些小伙伴可能会疑惑了,为什么上面还有个/vendor/,记得我们init包的时候回答过一个问题么?

Would you like the vendor directory added to your .gitignore [yes]? yes

嗯嗯,你懂了吧?

废话少说,经过职业玩家的一番噼里啪啦的敲击之后,代码被push到github上了,噼里啪啦的内容如下:

$ git status

# On branch master

# Untracked files:

# (use "git add <file>..." to include in what will be committed)

#

# .gitignore

# composer.json

# src/

nothing added to commit but untracked files present (use "git add" to track)

$ git add .

$ git commit -m "gogogo"

$ git push

接下来需要将github上的代码同步到https://packagist.org/上,去[Packagist的网站](https://packagist.org/](https://packagist.org/)注册一个账号(Login with github是个不错的选择)。登录,然后点击的大大的绿色背景按钮 Submit a Package,在 Repository URL (Git/Svn/Hg) 处输入包在github上的地址,这里就是:

https://github.com/GeHou/composer-car

now,点击 Check,如果一切顺利,会返回项目的名称,确认后点击 Submit 完成抓取 *** 作。

默认情况下Packagist是不会自动更新你在github上commit的代码的,在刚才导入的项目页面中点击 Force Update ,Packagist会抓取github上对应库的内容进行更新,但这还不是自动化的,幸运的是我们可以在Github库的设置中进行配置来消除手动更新的麻烦。

进入Github库的 Settings 页面,找到 Webhooks &Services 选项,点击 Configure services 按钮,在出现的列表中找到 Packagist,猛击它!这里需要填写一些信息,在Packagist网站的profile页面可以找到它们:

User : Packagist上的用户名

Token : Packagist的授权令牌

Domain : http://packagist.org

补全后点击 Update settings,如果列表中显示绿剪头就表示OK了。

真的OK了吗?还是有点担心?大不了我们再测试下嘛!

先跳出root目录,在测试环境下新建一个文件夹:

mkdir test-auto-update

cd test-auto-update

vim composer.json

这次我们不使用init命令,只往composer.json里填充一些简单内容:

{

"require": {

"php": ">=5.3.0",

"hou/composer-car": "dev-master"

},

"minimum-stability": "dev"

}

然后:

composer install

安装完后扫一眼test-auto-update/src/Ford/Fiesta目录看下是否只有2013款的Fiesta,然后暂时就不需要理会此目录下的内容了,让我们回到composer-car目录。

注:这时test-auto-update/vendor下面的hou/composer-car对应建立项目时的( / ) [hou/composer-car]。

听说2014款的嘉年华出了,赶紧追加新的车款吧:

在 composer-car/src/Ford/Fiesta 目录下新建文件Fiesta2014.php,填充它:

<?php

namespace Ford\Fiesta

class Fiesta2014

{

public static function info()

{

echo "This is Ford Fiesta2014!<br />"

}

}

修改show.php,在最后追加:

echo Fiesta\Fiesta2014::info()

访问测试页,看看是否出现了:

This is Ford Fiesta2014!

ok,再次提交代码:

git add .

git commit -m "test auto update"

git push

接着回到 test-auto-update 目录,这次要换一个命令耍耍,因为install命令之后root目录下会生成一个composer.lock文件,已经安装过的依赖是不能通过install命令进行更新的,所以这次需要使用composer update命令,试试这个命令,看看会发生什么:

$ composer update

Loading composer repositories with package information

Updating dependencies (including require-dev)

- Updating hou/composer-car dev-master (91bceb0 =>01550b4)

Checking out 01550b4eeaa85513573ce7406ca7d46ee30c6978

Writing lock file

Generating autoload files

类似这样的神秘信息又在屏幕上一闪而过,实际上因为网络的缘故,有时候得闪好久~

不管怎么闪,更新成功后你就应该在 test-auto-update/vendor/hou/composer-car/src/Ford/Fiesta/ 文件夹下中找到新的 Fiesta2014.php 文件了。不过这里需要注意一点,有时候Packagist与Github之间的同步可能会出现延迟,这时不妨喝杯咖啡、找妹子聊会、扣扣鼻孔之类的噼里啪啦一会再回来试试更新 *** 作。

好吧我们在 test-auto-update 根目录下新建一个 index.php 文件看看是否能跑起来,文件内容其实跟前面的show.php差不了多少:

<?php

require 'vendor/autoload.php'

use Ford\Fiesta as Fiesta

echo Fiesta\Fiesta2014::info()

不错的话,运行index.php文件后浏览器会输出:

This is Ford Fiesta2014!

至此更新 *** 作也被证实是OK了,同志赶紧自己动手试试吧。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7835953.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存