当项目部署到生产环境后,运维几乎不会给开发一个服务器的账号,哪怕是一个白户。
如果遇到需要安装其他包或者开源项目的时候,除了从git或者composer上下载,就剩下了复制,
那么如何复制从另一个composer下载的包(组件)呢?

如果只是简单的复制粘贴,从A项目里面复制到B项目里面,那么你会发现从A复制到B以后是无法使用的,

当你实例化这个类的时候就会提示你没有找到这个类,因为composer在安装的时候创建了一个自动生成类名的注册类

composer/autoload.php

// autoload.php @generated by Composer

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInitea24a8d88377c9cd0962665edfe67ce8::getLoader();

 

并且按照psr4规范自动更新了 autoload_psr4.php 跟 autoload_static.php,   

PSR-0规范的具体内容见:https://github.com/hfcorriez/fig-standards/blob/zh_CN/%E6%8E%A5%E5%8F%97/PSR-0.md 

PSR-4规范的具体内容见:https://github.com/hfcorriez/fig-standards/blob/zh_CN/%E6%8E%A5%E5%8F%97/PSR-4-autoloader.md

 autoload_psr4.php  映射文件地址

<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'think\\worker\\' => array($vendorDir . '/topthink/think-worker/src'),
    'think\\helper\\' => array($vendorDir . '/topthink/think-helper/src'),
    'think\\composer\\' => array($vendorDir . '/topthink/think-installer/src'),
    'think\\captcha\\' => array($vendorDir . '/topthink/think-captcha/src'),
    'think\\' => array($vendorDir . '/topthink/think-image/src'),
    'app\\' => array($baseDir . '/application'),
    'Workerman\\MySQL\\' => array($vendorDir . '/workerman/mysql/src'),
    'Workerman\\' => array($vendorDir . '/workerman/workerman'),
    'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'),
    'PhpOffice\\PhpSpreadsheet\\' => array($vendorDir . '/phpoffice/phpspreadsheet/src/PhpSpreadsheet'),
    'Matrix\\' => array($vendorDir . '/markbaker/matrix/classes/src'),
    'GatewayWorker\\' => array($vendorDir . '/workerman/gateway-worker/src'),
    'Complex\\' => array($vendorDir . '/markbaker/complex/classes/src'),
    'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'),
    'setasign\\Fpdi\\' => array($vendorDir . '/setasign/fpdi/src'),
    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
);

 

autoload_static.php   映射长度

public static $prefixLengthsPsr4 = array (
    't' =>
    array (
        'think\\worker\\' => 13,//
        'think\\helper\\' => 13,
        'think\\composer\\' => 15,
        'think\\captcha\\' => 14,
        'think\\' => 6,
    ),

....................

 

我们只需要将这两个文件的跟包相关的内容从A里面复制到B里面去,然后就可以愉快的new class了,

 

 

最后修改:2021 年 01月 27日 23:03:54

文章声明:非特殊说明,本文版权归 凌萍分享 所有,转载请注明出处
本文标题:简单的复制vendor下的包
本文标签:composer
如果觉得本篇文章对你有用,请随意赞赏;赞赏将用于服务器、域名开支