当项目部署到生产环境后,运维几乎不会给开发一个服务器的账号,哪怕是一个白户。
如果遇到需要安装其他包或者开源项目的时候,除了从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了,