Home / PostsPost

框架集成 Composer 包依赖管理

嘟噜聪2015/10/17 16:46:03 6234人已阅

简介 前段时间同事说让我写一个关于composer集成在框架里的文档,其实我是拒绝的。仔细一想,突然发现自己写了那么多的东西都使用了composer,却没有在任何一篇文章里讲要如何安装composer,可能是觉得这种太简单了,并且网上还有大量的中文文档可以参考,感觉自己再写这就有点多余了。既然是同事提了,那我就稍微写一点吧,写得不好也别打脸,必竟我水平就摆在那里。

框架集成 Composer 包依赖管理

前段时间同事说让我写一个关于composer集成在框架里的文档,其实我是拒绝的。仔细一想,突然发现自己写了那么多的东西都使用了composer,却没有在任何一篇文章里讲要如何安装composer,可能是觉得这种太简单了,并且网上还有大量的中文文档可以参考,感觉自己再写这就有点多余了。既然是同事提了,那我就稍微写一点吧,写得不好也别打脸,必竟我水平就摆在那里。

composer是什么

是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。*(一本正经的copy过来的)*。简单来说就是一个依赖包管理工具,写过Java的人应该都了解包管理,Composer 不是一个包管理器。它涉及 "packages" 和 "libraries",但它在每个项目的基础上进行管理,在你项目的某个目录中(例如 vendor)进行安装。默认情况下它不会在全局安装任何东西。因此,这仅仅是一个依赖管理。其实composer与Ruby on Rails的bundle很像,你看symfony就是一个一个的bundle组成的。

安装composer

以下的所有操作我都是在linux系统下执行的(CentOS,Ubuntu也类似) 可能会有些东西连不上或报错,如果发生这种现象请使用代理工具保证能访问到国名的资源,还有就是所有的前提都是你本机已经装好php5.3以上的版本。

苹果OS X系统的安装方法网上也很好找,有兴趣的可以Google一下。

下载 Composer 的可执行文件

有一种方式是把composer.phar下载/bin目录下取名为composer 就可以了,这个比较简单然后执行composer看看能不能运行起来。

咱们还是用正常人的方式来安装吧,也非常简单,执行下面命令就好了:

curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin
mv /usr/bin/composer.phar /usr/bin/composer

--install-dir 是指定composer的安装目录,下载完后把文档名改成composer,这样的话就可以在全局任何地方执行了,不信的话您可以敲一下composer -V命令,应该会显示当前的版本号及更新时间。这样composer就安装好了,是的,就这么简单,毫无任何技术含量。

CodeIgniter、ThinkPHP增加composer

其实这个也非常简单,咱们进入到ci的根目录,执行命令composer install骚等一段时间(这里如果不直安装不了的话请使用代理),安装完成后在当前目录会生成一个/vendor的目录,并且当前目录会生成一个composer.jsoncomposer.lock 这里要注意的是,如果没有特殊需求的话composer.lock应该是不需要修改的,除非那个资源访问不了了,而咱们如果需要增加依赖包的话只要修改composer.json文件就可以了。 下面的是/vendor目录的结构:

/vendor
    /composer/
        autoload_classmap.php
        autoload_files.php
        autoload_namespace.php
        autoload_psr4.php
        autoload_real.php
        ClassLoad.php
        include_paths.php
        installed.json
    autoload.php

composer.json

{
  "require": {
    "twig/twig" : "~1.0",
    "monolog/monolog": "1.2.*",
    "doctrine/orm": "2.5.0",
    "ircmaxell/password-compat": "~1.0.3",
    "erusev/parsedown": "1.5.3",
        "videlalvaro/php-amqplib": "^2.6"
  }
}

ps: *以上的composer.json*文件里的配制是我现在项目上用到了一些名,当然,刚装好这里什么也木有。

东西也不多,有兴趣的话可以看看,挺好理解的,当然,如果没有特殊需求的话,这些文件也是不用去修改的,因为每次新增加依赖包的话它会自动更新,并且把namespace及路径更新进去,ok这样我们就算是准备好composer了。

CodeIgniter用ThinkPHP引入autoload.php 文件

CI这个相当简单,只要在index.php文件的require_once BASEPATH.'core/CodeIgniter.php';上面把composer的autoload.php文引入进去就行了,具体的可以看下面:

require_once './vendor/autoload.php';
require_once BASEPATH.'core/CodeIgniter.php';

ThinkPHP与CI一样,只要在入口文件把autoload.php文件引入进去就行了。

require_once './vendor/autoload.php';
require './ThinkPHP/ThinkPHP.php';
安装一个依赖包

安装依赖包的方法有两种,我就以一个markdown解析工具为例子吧,其他包的使用方法大同小异:

  • composer require erusev/parsedown

    推荐使用这种方式,方便快捷

  • 编辑composer.json文件,在文件的增加:

    {
      "require": {
        "erusev/parsedown": "1.5.3",
      }
    }
    

    这种方式需要再进行一步操作

    执行命令: composer update ps: 这种方式不太推荐,因为它会把之前所有的包都更新成最新的 速度老慢了...

当上面的那些命令执行完成后理论上包就应该已经下来了,它会在/vendor 目录下的 /vendor/erusev/parsedown 目录,并且更新了/vendor/composer目录下的一些文件,简单说就是进行了包的注册,方便后面使用。

使用

CodeIgniter

使用方法非常简单,我都不好意思写,咱们打开Welcome.php控制器,有两种方式:

  • 使用 use 关键字把Parsedown类给引入进来,然后再 new关键字实例化
  • 直接使用new关键字实例化,但必须new这个命令空间

    class Welcome extends CI_Controller {
        
    public function indexByUse()
    {
        $parseDown = new Parsedown();
            
        echo $parseDown->text("# Hello World!");
    }
        
    public function indexByNew()
    {
        $parseDown = new \Parsedown(); // 因为这个包比较简单没有声名一个包,有些可能是这样 new \Bundle\Controller(); 
            
        echo $parseDown->text("# Hello World!");
    }
    }
    
    

上面两种方法也不能说谁优谁劣势,不过建议还是使用use好些,以后方便管理。

ThinkPHP

这个与CI框架一样,我就不多兴例子了,直接贴代码吧...

class DefaultAction extends Action {
    
    public function indexUse()
    {
        $parseDown = new Parsedown();
        
        echo $parseDown->text("# Hello World!");
    }
    
    public function indexByNew()
    {
        $parseDown = new \Parsedown();      
        echo $parseDown->text("# Hello World!");
     }
}

尾巴

附上package的地址,如果想使用一些第三方的包的话可以去这里找。 地址: https://packagist.org

好了,关于composer的篇章就讲完了,系是系超级简单啊。哈哈哈哈哈,这东西真的很不错,大家好好玩。关于如果提交自己写的包至packagist,这个我也不没试过,等我把它整透彻之后有机会,有时间,咱们可以再来讨论讨论。

Date: 2015年10月17日

很赞哦! (0)

文章评论

点击排行

本栏推荐

标签

站点信息

  • 微信公众号