composer——现代PHP的基石

2019.09.05 更新:

在 laravel-admin 项目中安装 redis 和 chartjs 插件时,报错 PHP内存不足,我把php的内存设置为 2G 还是不足,后来设置 -1 后解决问题。

原因可能是: php gc,禁用 gc 可能会有效果;(待研究~)

2019.07.21 晚上 更新:

阿里云 packagist 有问题,会报如下错误,所以 阿里云 packagist 慢慢观察看吧,目前我是翻墙+https://packagist.phpcomposer.com,慢但是不会报错。

2019.07.21 更新:

由于阿里云上线了 composer 全量镜像,so 建议 更换阿里云的 packagist :

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer config -g --unset repos.packgaist // 取消配置

2019.06.03 更新:

在windows环境下,重新修改composer所依赖的php版本,可以在修改环境变量(计算机右键->属性->高级系统设置->高级->环境变量->PATH)里面的php版本就可以了。

<?php 以下是原文 ?>

如果你现在做PHP还不会使用composer的话,那真的有点 out 了。

composer带给我们的不仅仅是方便快捷,更多的是能让我们有一种模块化开发的概念,减少不必要的代码功能重复,加快开发速度。

英文:composer官网 中文: composer中文网站

接下来就是简单的总结了。

一、安装的时候,全局安装。

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

二、由于“墙”的存在,我们需要把 packagist(composer仓库)改成国内镜像

composer config -g repo.packagist composer https://packagist.laravel-china.org
composer config -g repo.packagist composer https://packagist.phpcomposer.com(上面的不行了,换成这个)

三、常用命令

-> composer -vvv <command> // 输出执行命令时的详细信息
-> composer archive // 将项目中的包,打包为压缩文件
-> composer config -l -g // 查看全局 composer 配置
-> composer create-project <name/packname=5.1.*> [<yours_project_name>] -- 创建一个新项目
-> composer diagnose // 诊断系统的常见错误。这对于调试非常有用,因为它检查一些例如连接到包、可用磁盘空间和 git 的设置等.
-> composer dump-autoload // 重新生成 autoload 文件(类库映射文件)
-> composer help <command> // 显示给定命令的帮助页面.
-> composer init -- 手动创建一个composer.json,然后使用 composer install ,超级麻烦。
-> composer install [--no-dev] // 根据 composer.lock 进行安装,如果没有composer.lock,则根据 composer.json。后面的参数不会安装测试环境的包。
-> composer search // 当你不知道具体的包名时使用。
-> composer self update // composer更新到最新的可用版本.
-> composer show -i // 显示所有安装的package。
-> composer status // 显示一组本地被更新的依赖。如果从源代码中安装一些 东西 (用 --prefer-source 选择项), 最终我们将会在 /vendor 文件夹克隆该包。如果我们修改了包信息, composer status 命令将会使用 git 展示这些修改.
-> composer update ["<name/packname:2.1.*>"]-- 根据 composer.json 进行安装,同时更新 composer.lock。相当于删除了 composer.lock,然后重新运行 composer install。如果后面没有 name/packname ,则更新所有的包到最新版本。不建议使用,容易忘记后面的 name/packname;
-> composer remove symfony/console // 移除包
-> composer require "name/packname:3.2.*" 安装新的包,可以指定版本。建议使用。
-> composer require symfony/console=4.3.4 [--dev] // 是否只在测试环境下安装。
-> composer global require phpunit/phpunit -- phpunit 几乎所有的项目都会需要phpunit,所以可以全局安装

版本问题:
1.2.3 -- 确定版本
1.2.* -- 安装1.2的任意版本
>=1.0,<2.0 -- ,表示 and ,| 表示 or;
~1.2 -- 相当于 >=1.2,<2.0
~1.2.3 -- 相当于 >=1.2.3,<1.3

稳定性问题
stable > RC > beta > alpha > dev
  • –prefer-dist 和 –prefer-source区别:前者是从github下载的 .zip 压缩包,并进行缓存,下次使用时会从缓存中加载,速度更快,适用于直接使用;后者是直接下载的源码,包括了git信息,无法缓存,适用于源码修改;

四、项目中使用

一般来说composer插件都下载至根目录下的 /vendor 文件夹下。

require/include __DIR__ . '/vendor/autoload.php'; // 可以在项目中正常使用了

五、自己创建一个 composer 包

1. 在一个测试目录下,创建一个文件,/src/Main/FormatData.php ,内容如下图所示:

2. composer init 生成 composer.json文件,并手动填写

3. 在 composer.json 中添加 autoload。

{
    "name": "mt/formatdata",
    "description": "mt test files",
    "type": "library",
    "license": "creative commons",
    "minimum-stability": "dev",
    "require": {},
    "autoload": {
    	"psr-0": {
    		"Main": "src/"
    	}
    }
}

4. 运行 composer install ,然后创建 index.php 文件:

<?php 
require_once './vendor/autoload.php';
use Main\FormatData;

$str = "good;test";
$For = new FormatData();
var_dump($For->str2Arr($str));

5. 运行 php index.php 结果如下,测试 ok ;

6. 接下来就是注册一个github账号,然后用github账号注册 packagist,提交。



他们说快写一首情歌雅俗共赏

落笔传神还要容易传唱

上得厅堂也下得厨房

就像我一直在找的姑娘

—— 许嵩 《雅俗共赏》

Posted

in

by

Tags: