zoukankan      html  css  js  c++  java
  • 如何在本地开发Composer包

    如何在本地开发Compoer包

    周煦辰
    2019-05-26

    记录一下如何在本地开发一个Composer包,以及如何发布到Packgist

    假设你要开发一个名叫xuchen/biubiubiu的包。

    准备工作

    你得保证你的系统用已经安装了

    1. Git
    2. PHP与Composer

    并且保证在命令行中都可以使用

    准备一个空项目用于测试

    我们首先需要在本地新建一个空的Composer项目,用来生成autoload.php文件,以及在其vendor目录中引入我们之后开发完成的包来进行测试。当然,如果你已经有一个正在开发中的项目,例如一个基于Laravel框架的项目,那么你可以跳过目前这一步。

    具体可以先看一下Composer的文档,如何初始化一个项目

    假设我们需要在D盘新建我们的空项目,名称为composer-workspace,则新建如下目录

    d:/composer-workspace
    

    在刚刚新建的目录中打开命令行,使用如下命令初始化空项目

    composer init
    

    composer会引导你输入各种参数来完成包的创建,名字填写<your-name>/composer-workspace即可,其他参数全部默认。我们就假设这个项目叫xuchen/composer-workspace吧。

    完成以上的步骤后,我们就能在composer-wokspace目录下看到一个composer.json文件。

    去Github上开个新坑

    又到了每个程序员喜闻乐见的环节:去Github上开个新坑。当然了,这次我们希望能把这个Repo完善。

    我们得假设你的包还未作为一个Composer包开发。至于为什么要这么假设,大部分的包,都是业务代码写着写着发现可以抽象出一个通用的包来使用,于是想着迁移到一个单独Composer包中。当然了,前提是:

    1. 原本的代码就是你的个人项目,没有使用你的上班时间及公司设备来开发。
    2. 或者,公司支持你的开源行为。

    既然是新的包,我们自然要去Github上开个新坑,,Github上开新坑的步骤我就不赘述了。在Github上开一个Repo的目的并不仅仅是为了代码管理,最后我们想要将代码发布到Packgist也需要用到Github。

    假设我们新开的GithubRepo叫Biubiubiu好了。

    Clone你的Repo并放到随便什么位置

    在Github上开好新坑了,就需要把代码Clone下来,我们就放在如下位置吧:

    d:/workspace/biubiubiu
    

    使用Composer初始化你的项目

    到上一步的代码目录中,运行:

    composer init
    

    name填写xuchen/biubiubiudescription随便,stabilitydevrequire暂时可以不填,等到composer.json文件生成之后再说。

    一路火花带闪电,项目的composer.json生成了,一个初始化状态的composer.json非常简陋,但是问题不大:

    {
        "name": "xuchen/biubiubiu",
        "minimum-stability": "dev"
    }
    

    规定代码的命名空间

    接下来就要把代码放进来了,关于这块,你可以先看看Composer自动加载文档

    要用到autoload,我们就需要规定好我们包代码的命名空间,假设biubiubiu这个包的命名空间是XuchenBiubiubiu<ClassName>,且代码放在<包的根目录>/src目录下,则需要对composer.json做如下修改:

    {
        "name": "xuchen/tencent-cos",
        "minimum-stability": "dev",
        "autoload": {
            "psr-4": {
                "Xuchen\Biubiubiu\": "src/"
            }
        }
    }
    

    autoload字段中规定了我们需要自动载入的代码,从上述代码中可以看到:规定了命名空间为XuchenBiubiubiu,该命名空间对应的代码目录在<包的根目录>/src下。

    到composer-workspace中引入包

    现在我们要回过头在最开始创建的项目中引入xuchen/biubiubiu

    修改d:/composer-worksapce/composer.json,加入repositories字段:

    {
        "name": "xuchen/composer-workspace",
        "repositories": {
            "xuchen/biubiubiu": {
                "type": "path",
                "url": "d:/workspace/biubiubiu",
                "options": {
                    "symlink": true
                }
            },
        }
    }
    

    在当前目录(d:/composer-worksapce)下,运行:

    composer require xuchen/biubiubiu @dev
    

    完成之后,你会发现在当前目录的vendor中出现了xuchen/biubiubiusymlink。此时,正在开发中的xuchen/biubiubiu包已经正确引入到了composer-workspace这个项目中。

    写一个测试类

    到刚刚规定的<包的根目录>/src下新建一个测试类,就命名为Demo.php好了:

    <?php
    
    namespace XuchenBiubiubiu;
    
    
    /**
     * Class Demo
     * @package XuchenBiubiubiu
     */
    class Demo
    {
        public static function execute()
        {
            echo 'It works!';
        }
    }
    
    

    测试包是否已正确引入

    composer-workspace项目根目录下新建一个php脚本,命名为test-autoload.php

    <?php
    
    use XuchenBiubiubiuDemo;
    
    require_once './vendor/autoload.php';
    
    Demo::execute();
    

    在当前目录打开命令行,使用如下命令

    php -f test-autoload.php
    

    会看到命令行上输出:

    It works!
    

    这表明xuchen/biubiubiu包中的Demo.php已经通过Composer的自动载入功能正确载入到了composer-workspace项目中。

    项目依赖

    假如xuchen/biubiubiu项目依赖其他的包,例如常用的Guzzle

    biubiubiucomposer.json中加入如下依赖:

    {
        "name": "xuchen/tencent-cos",
        "minimum-stability": "dev",
        "require": {
            "guzzlehttp/guzzle": "^6.3"
        },
        "autoload": {
            "psr-4": {
                "Xuchen\Biubiubiu\": "src/"
            }
        }
    }
    

    composer-workspace项目中使用命令行:

    composer update
    

    Composer会在composer-workspace中安装Guzzle,如此便可在xuchen/biubiubiu中直接引入Guzzle使用。

    参考

    Developing composer packages locally

  • 相关阅读:
    Android 接口中含有" "不能正常显示
    android
    EditText禁止自动弹出键盘
    相册选择照片
    Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取
    Android WebView获取UserAgent
    php extract()用法
    php的安装和破解
    php 兼容换行符
    php 引用
  • 原文地址:https://www.cnblogs.com/zhouxuchen/p/10926201.html
Copyright © 2011-2022 走看看