Composer加载机制案例? Composer命令介绍

https://learnku.com/docs/composer/2018/04-schema/2085 开头一篇compser.json的各个关键字含义

就很突然:出现一处常量重复定义的错误 如下:


(1/1) ErrorException
Constant LOCATION_SERVICE_PRODUCT_NAME already defined

in LocationService.php (line 24)
at HandleExceptions->handleError
(8, 'Constant LOCATION_SERVICE_PRODUCT_NAME already defined', 
'E:\\Test_tran\\transfer_Nogit_Test\\vendor\\mrgoon\\aliyun-sms-sdk
\\aliyun-php-sdk-core\\Regions\\LocationService.php', 24,
array('endpoint_filename' => 
'E:\\Test_tran\\transfer_Nogit_Test\\vendor\\mrgoon\\aliyun-sms-sdk\\
aliyun-php-sdk-core\\Regions\\endpoints.xml',
'xml' => object(SimpleXMLElement), 'json' => '
{"Endpoint":[{"@attributes":{"name":"jp-fudao-1"},
"RegionIds":{"RegionId":"jp-fudao-1"},"Products":{"Product":{"ProductName":"Ecs","DomainName":"ecs-cn-hangzhou.
aliyuncs.com"}}},{"@attributes":{"name":"me-east-1"},
"RegionIds":{"RegionId":"me-east-1"},"Products":{"Product":............................堆栈................

首先 laravel 给出了很明确的提示 常量重复定义 但是从堆栈看 并看不出任何问题

纠结无果 尝试很多种调试 最终发现 是composer.json 的autoload 里面 加载了 files 类型 也就是 手动添加的 自动加载文件 里面 有阿里云短信的核心服务代码

和 安装的 mrgoon/aliyun-sms-sdk(composer install安装的) 里面 没有加 if(!defined('LOCATION_SERVICE_PRODUCT_NAME')) 直接使用了 define("LOCATION_SERVICE_PRODUCT_NAME", "Location"); 导致出错

#### 由此可见  composer 会从 require  和  autoload 里面定义的文件  并将它们加载进来 
除此之外  "autoload":{}定义的其他属性 也是加载文件 只是加载方式的区别

https://developer.aliyun.com/composer aliyun composer镜像

补充一下命令解释:

composer install 取.lock 生成环境部署 
composer require 安装指定的扩展包 
composer update 跟新composer.json 所有的文件到最新 
composer remove 删除指定的扩展包 
当只要引入线上require中的依赖时候执行 
composer install --no-dev 二者都要引入时这不需要 --no-dev。
composer install -vvv 输出详细信息
composer基本使用 
一、Composer的安装 1、下载Composer 2、Composer安装   
1)、Composer安装前请确保已经安装了php;打开命令行窗口输入php -v可以查看php的当前版本号。 3、局部安装与全局安装   局部安装:正确安装完后,可以将 composer.phar 文件复制到任意目录(比如项目根目录下),然后通过 php composer.phar 指令即可使用 Composer 了   全局安装:将 Composer 安装到系统环境变量 PATH 所包含的路径下面,然后就能够在命令行窗口中直接执行 composer 命令了   注:composer --version命令可以查看版本信息;     composer selfupdate命令可以将composer更新到最新版本; 二、Composer基本使用 1、composer update、composer install 与 composer require的区别   Composer update:     根据composer.json文件的包依赖关系将包更新到最新版本,并将版本依赖信息更新到composer.lock文件中;   Composer update vendor/package:     从composer.json获取依赖关系,并将指定的package更新到最新版本,并将版本信息更新到composer.lock文件;   Composer install:     若有composer.lock文件,则据此直接安装,否则就根据composer.json文件安装最新扩展包和依赖;   Composer require package(new):    项目有新的扩展包和依赖时,通过此命令添加,可以指定版本,例如:composer require package ~2.5;   注意:composer update 命令会将所有包和依赖更新到最新版本,可能会对项目产生巨大伤害,需要慎用!!! 2、composer.json与composer.lock的区别   composer.json:    此文件用来声明项目中包之间的依赖关系以及一些元素信息;   composer.lock:    此文件用来锁定项目中包与依赖的版本信息,通常配合composer install来使用,确保项目中的成员得到一个版本的包与依赖关系;

补充 composer 是php的代码依赖管理器 其实前面还有PEAR 一个传统类库形式 Pecl C等写的扩展形式

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论