composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/
composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/
composer config -g --unset repos.packagist
composer search ThinkPHP
composer create-project topthink/ThinkPHP=5.1.* ./tp5
composer require laravel/laravel ">=5.5"
composer remove laravel/laravel
转换 PSR-0/4 autoloading 到 classmap 获得更快的载入速度,禁用开发者模式
composer dump-autoload -o --no-dev
目前支持四种自动加载方式:
PSR-0 规范是 PHP5.2 之前的一种命名空间映射规范,它规定命名空间与文件路径的对应关系如下
"psr-0" : {
"Foo\\" : "psr0src/",
#
"Foo_Bar_" : "psr0src/"
},
composer install/update 之后,PSR-0 引用全部合并到 vendor/composer/autoload_namespaces.php
PSR-4 规范是较新的一种命名空间映射规范,它与 PSR-0 规范的区别在于:
命名空间中的下划线字符不再被特殊处理,只有命名空间分隔符(\)会被转换成目录分隔符(/);
命名空间中的首字母和下划线字符不再被强制转换成小写字母;
类的文件名与类名可以不完全一致,但必须满足相对文件路径和类名的对应关系
"psr-4": {
#查找Afishpapa\Httptool\Http类时的路径为src/Http.php
"Afishpapa\\Httptool\\": "src/"
#可以在src/和lib/ 下面找 Monolog命名空间下的类
"psr-4": { "Monolog\\": ["src/", "lib/"] }
#所有命名空间都来src/目录下找
"" : "src/"
}
composer install/update 之后,PSR-4 引用全部合并到 vendor/composer/automoad_psr4.php 中。
return array(
'Afishpapa\\Httptool\\' => array($baseDir . '/src'),
);
composer install/update 之后,PSR-4 引用全部合并到 vendor/composer/autoload_classmap.php 中。
你可以用 classmap 生成支持支持自定义加载的不遵循 PSR-0/4 规范的类库。
通常作为函数库的载入方式(而非类库)。
{
"autoload": {
"files": ["src/MyLibrary/functions.php"]
}
}
-v : 增加消息的详细程度,正常输出
-vv : 增加消息的详细程度,更加详细得输出
-vvv : 增加消息的详细程度,debug用
-h : 显示帮助
-q : 不要显示任何信息
-n : 不要问任何交互问题
-d : 设置工作目录
–ansi: 强制输出 ANSI 编码
–no-ansi: 禁用 ANSI 编码
–version (-V): 展示所有应用版本
–profile: 展示时间和内存信息
–prefer-install: 默认值为dist
dist: 检查本地缓存压缩包,如果有直接复制到vendor目录,如果本地缓存没有,则去远程仓库下载压缩包,如果远程仓库没有提供压缩包,则尝试从github中安装包,并且删除.git版本信息,总之,dist能够快速地下载并安装依赖包,适用于大部分生产环境。
source: 直接从github中下载源码,保留.git信息,如果您需要对包进行自定义修改或者需要对其进行特殊的构建过程,则应该使用 source。
auto:2.1版本后已弃用
-o: 生成自动加载器文件的优化版本,以加快类加载速度。
-a: 默认情况下,Composer 会根据 composer.json 中的 PSR-4 和 PSR-0 配置来生成自动加载器, 使用 --classmap-authoritative 选项可以让 Composer 忽略 PSR-4 和 PSR-0 配置,而直接根据类文件生成一个类映射表(class map),并将其作为自动加载器的唯一来源。需要注意的是,使用 --classmap-authoritative 选项可能会导致一些问题,比如在添加新的类文件时需要重新生成类映射表,否则新添加的类无法被自动加载器加载。因此,建议在开发环境中使用这个选项来提高性能,但在生产环境中不要使用,以免出现问题。
–dry-run: 执行安装过程的模拟运行,不会实际下载或安装任何软件包。
–dev: 安装开发依赖项,包括测试框架和调试工具等。
以交互方式初始化 composer
–name: 包名,格式为作者/名称,比如monolog/monolog
–description: 简短描述
–author: 作者名
–type: 包的安装类型,默认library
library : 它会简单的将文件复制到 vendor 目录
project : 当前包是一个项目,而不是一个库
metapackage : 一个空的包,包含依赖并且需要触发依赖的安装,这将不会对系统写入额外的文件。
composer-plugin : 它有一个自定义安装类型,可以为其它包提供一个 installler。
–homepage: 官网首页
–require: 引入包,格式为 包:版本 foo/bar:1.0.0
–require-dev: 开发用的组件
-s : 最小稳定性值 dev stable
–license (-l): 许可证
–repository: 指定一个或多个 Composer 仓库
-a : 添加一个autoload.psr-4的对象到composer.json
如果存在 composer.lock 文件,它会从此文件读取依赖版本,这确保了该库的每个使用者都能得到相同的依赖版本。
如果不存在 composer.lock 文件,它会从 composer.json 文件读取依赖版本,并把其安装到 vendor 目录下。
如果没有 composer.lock 文件,composer 将在处理完依赖关系后创建它。
添加一个包到 composer.json 文件,如果没有 composer.json 就创建一个
# 该命令会安装两个不同的软件包
# vendor/package:2.* : 版本号以 2. 开头,后面跟着任何版本号。
# vendor/package2:dev-master : 使用 dev-master 分支。这意味着它将安装该分支的最新版本,通常是开发版本,不属于正式发布。
composer require "vendor/package:2.*" vendor/package2:dev-master
获取依赖的最新版本
# 只更新这两个包vendor/package vendor/package2
composer update vendor/package vendor/package2
# 更新符合正则匹配的包
composer update "vendor/*"
# 更新依赖包到指定版本,需符合composer.json的约束
composer update --with vendor/package:2.0.1
移除依赖包
# 移除这两个包
composer remove vendor/package vendor/package2
composer reinstall
重装包,如果不小心改了包文件,可以使用重装命令恢复
# 重装两个包
composer reinstall acme/foo acme/bar
# 重装正则匹配的包
composer.phar reinstall "acme/*"
用于检查您的 PHP 和扩展版本是否符合已安装包的平台要求
--lock: 仅从锁定文件中检查要求,而不是从已安装的包中检查要求。
--no-dev: 不检查 require-dev 包要求。
-f: 格式
> composer check-platform-reqs
Checking platform requirements for packages in the vendor dir
ext-json 1.7.0 success
ext-libxml 7.3.4 success
ext-mbstring 7.3.4 success
ext-openssl 7.3.4 success
ext-simplexml 7.3.4 success
php 7.3.4 success
global 允许您全局运行其他命令,如 install、remove、require,update
搜索依赖包
-N : 只搜包名
-O : 只搜作者
-t : 搜全称
λ composer search monolog
monolog/monolog Sends your logs to files, sockets, inboxes, databases and various web services
symfony/monolog-bundle Symfony MonologBundle
symfony/monolog-bridge Provides integration for Monolog with various Symfony components
...
λ composer show
defuse/php-encryption v2.3.1 Secure PHP Encryption Library
laminas/laminas-diactoros 2.5.0 PSR HTTP Message implementations
laminas/laminas-zendframework-bridge 1.4.1 Alias legacy ZF class names to Laminas Project equivalents.
...
λ composer show slim/slim
name : slim/slim
descrip. : Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs
keywords : api, framework, micro, router
versions : * 3.12.4
type : library
license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : https://slimframework.com
source : [git] https://github.com/slimphp/Slim.git ce3cb65a06325fc9fe3d0223f2ae23113a767304
dist : [zip] https://api.github.com/repos/slimphp/Slim/zipball/ce3cb65a06325fc9fe3d0223f2ae23113a767304 ce3cb65a06325fc9fe3d0223f2ae23113a767304
path : D:\workspace\oauth\examples\vendor\slim\slim
names : slim/slim, psr/http-message-implementation
support
issues : https://github.com/slimphp/Slim/issues
source : https://github.com/slimphp/Slim/tree/3.12.4
autoload
psr-4
Slim\ => Slim
requires
ext-json *
ext-libxml *
ext-simplexml *
nikic/fast-route ^1.0
php >=5.5.0
pimple/pimple ^3.0
psr/container ^1.0
psr/http-message ^1.0
requires (dev)
phpunit/phpunit ^4.0
squizlabs/php_codesniffer ^3.6.0
provides
psr/http-message-implementation 1.0
λ composer outdated
Direct dependencies required in composer.json:
laminas/laminas-diactoros 2.5.0 2.14.0 PSR HTTP Message implementations
league/event 2.2.0 3.0.1 Event package
slim/slim 3.12.4 4.9.0 Slim is a PHP micro framework that helps you quickly write simple yet po...
Transitive dependencies not required in composer.json:
psr/container 1.1.1 2.0.1 Common Container Interface (PHP FIG PSR-11)
# 打开这个包的官网
composer browser -H slim/slim
# 打印slim的github仓库链接
composer browser -s slim/slim
λ composer suggests
lcobucci/jwt suggests:
- lcobucci/clock: *
1 additional suggestions by transitive dependencies can be shown with --all
composer fund
```bash
#### 给出你所用的包的捐赠链接
```bash
composer depends / why
```bash
> composer depends 命令用于显示一个包的依赖关系树。如果你要删除一个包之前,可以用这个命令先看看它上面是不是有人
```bash
> composer depends psr/log -t
psr/log 1.1.4 Common interface for logging libraries
├──composer/composer 2.4.x-dev (requires psr/log ^1.0 || ^2.0 || ^3.0)
├──composer/composer dev-main (requires psr/log ^1.0 || ^2.0 || ^3.0)
├──composer/xdebug-handler 3.0.3 (requires psr/log ^1 || ^2 || ^3)
│ ├──composer/composer 2.4.x-dev (requires composer/xdebug-handler ^2.0.2 || ^3.0.3)
│ └──composer/composer dev-main (requires composer/xdebug-handler ^2.0.2 || ^3.0.3)
└──symfony/console v5.4.11 (conflicts psr/log >=3) (circular dependency aborted here)
告诉您哪些包在阻止你想安装的包,并给出理由
如果你手动修改 composer.json, 当准备提交 composer.json 文件之前,最好执行这条命令检查一下
如果你手动修改过一个包,这个包安装来源是 source, 则可以用这个命令看你本地修改记录,相当于 git status
composer 程序自更新
# 更新到指定版本
composer self-update 2.4.0-RC1
修改当前项目或者全局的配置
-g : 修改全局配置文件
–unset: 移除配置
-l: 展示全部配置信息,如果加上-g,就显示全局的
–absolute: *-dir的配置返回绝对路径
–append: 追加一个镜像时,设置比较低的优先级
–source: 展示config从哪里加载的
# 添加一个测试foo到repositories
composer config repo.foo vcs https://github.com/foo/bar
# 添加一个阿里云镜像到repositories(阿里云镜像凉了)
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
#效果如下
"repositories": {
"packagist": {
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
},
"foo": {
"type": "vcs",
"url": "https://github.com/foo/bar"
}
}
# 修改extra配置
composer config extra.foo.bar value
composer config --json extra.foo.bar '{"baz": true, "qux": []}'
创建项目 / 包,相当于 git clone + composer install
composer create-project doctrine/orm path "2.2.*"
当修改了包里面的类名,或者增加删除文件之后,需要执行这个命令
# -o 选项是为了生产环境中的性能优化,
composer dump-autoload -o
# -a 选项则是为了开发环境中的重新生成类映射。
composer dump-autoload -a
清理本地包缓存
从远程下载一个包,并打包成 zip/tar 压缩包
php composer.phar archive vendor/package 2.0.21 --format=zip
你可以运行此命令来手动执行,只需要指定脚本的名称,可选的 --no-dev 参数允许你禁用开发者模式。
{
"scripts": {
"post-update-cmd": "MyVendor\\MyClass::postUpdate",
"post-package-install": [
"MyVendor\\MyClass::postPackageInstall"
],
"post-install-cmd": [
"MyVendor\\MyClass::warmCache",
"phpunit -c app/"
]
}
}
# 将会运行所有 post-install-cmd 事件下定义的脚本。
`composer run-script post-install-cmd`
可以用来检查当前 Composer 环境是否符合最佳实践,包括 PHP 环境、Composer 配置等。
检查当前项目的依赖项是否存在已知的安全漏洞。
使用 help 可以获取指定命令的帮助信息。
php composer.phar help install