winter / packager
在 PHP 应用程序中运行 Composer 命令
v0.2.2
2023-01-22 11:05 UTC
Requires
- php: ^7.4.0 || ^8.0
- ext-openssl: *
- ext-zip: *
- ext-zlib: *
- composer/composer: ^2.1.0
- symfony/process: ^4.3.4 || ^5.0 || ^6.0
Requires (Dev)
- dms/phpunit-arraysubset-asserts: ^0.4.0
- phpstan/phpstan: ^1.6
- phpunit/phpunit: ^8.5.15 || ^9.5.4
- symfony/phpunit-bridge: ^4.3.4 || ^5.0 || ^6.0
Replaces
- bennothommo/packager: v0.2.2
README
在 PHP 应用程序中运行 Composer 命令和执行 Composer 搜索和查询。这个库作为 Composer 命令的 PHP 包装器,通过 PHP 进行包管理,并使用 Composer、Packagist API 和您的项目 lockfile 的组合来获取有关已安装或可用的包的信息。
实际上,您不需要安装 Composer,因为这个库将作为依赖项引入 Composer 应用程序 - 但是,您需要 Composer 来安装这个库本身。
用例
这个库最初是为了通过 PHP 为 Winter CMS 提供Composer使用而编写的,以支持其升级和插件架构。Winter CMS 用户群体中的一部分更喜欢基于网络的安装方法,并希望不使用(或者根本无法使用)命令行的Composer应用程序。
因此,这个库利用了Composer维护依赖项的能力,并以一种可以编程控制和以更友好的格式呈现给这些用户的方式进行。
安装
通过 Composer 安装
composer require winter/packager
使用方法
这个库目前支持以下 Composer 命令
install
search
show
update
version
(--version)
您可以在您的 PHP 脚本中创建一个 Composer
实例并运行这些命令,定义包含 composer.json
文件的工作目录,以及存储缓存包的首页目录。
<?php use Winter\Packager\Composer; $composer = new Composer(); $composer ->setWorkDir('/home/me/project/') ->setHomeDir('/tmp/composer'); // Get the Composer version $version = $composer->version(); // Run an install or update on the entire project, including dev dependencies $install = $composer->install(); $update = $composer->update(); // Install project without dev dependencies $install = $composer->install(false); // Show installed packages $show = $composer->show(); // Search packages $results =
每个命令的文档将很快提供。
限制
- Composer 在底层使用
symfony/process
进行各种操作。大多数共享主机不会允许这样做,通过阻止proc_*
函数或pcntl
扩展。如果您的托管商也这样做,您将无法使用脚本或某些插件。
安全影响
请注意,这个库确实引入了一些安全影响,您在使用之前可能需要考虑。
- 如果在基于 Web 的环境中使用此库,必须使供应商文件夹和文件可写,以便运行您的 Web 服务器的用户。您 不应 使您的供应商文件夹可供 Web 访问,否则这将成为攻击的简单途径。
- 允许脚本在 Composer 中运行可能会授予脚本对您的 Web 环境或外围 PHP 应用的访问权限。除非您绝对信任您的依赖项,否则不应运行脚本。
特别感谢
- Composer 团队
- Stack Overflow 上的用户 "Endel",他提供的 这个答案 是这个库灵感的来源。