werbfred/composer-package-updater

本项目提供了一种在安装、更新和卸载包时执行脚本的方案。

1.0.2 2020-06-26 11:11 UTC

This package is auto-updated.

Last update: 2024-09-26 21:52:14 UTC


README

本项目提供了一种在安装、更新和卸载包时执行脚本的方案。

目前只执行根目录下的 composer.json 文件中定义的脚本。这是对 Composer 的 问题 1993 的一个解决方案。

出于安全考虑,Composer\Script\PackageEvent 只会将这些事件转发给触发这些事件的包。

以我的情况为例,我在一个 Git 仓库中托管了 Drupal 模块和主题。一旦通过 composer 安装/更新,我想要

  • 运行 compass 来生成 .css 文件
  • 删除一些文件 (.gitignore, .sass 目录,...)

每个模块或主题负责执行自己的安装/更新/卸载任务。

设置它!

通过 packagist 安装此项目

composer require werbfred/composer-package-updater

打开根目录下的 composer.json 文件,用以下配置更新它

自动加载

"ComposerPackageUpdater\\composer\\": "vendor/werbfred/composer-package-updater/src/composer" 添加到 autoload 部分的 psr-4

示例

"autoload": {
   "psr-4": {
      "ComposerPackageUpdater\\composer\\": "vendor/werbfred/composer-package-updater/src/composer"
   }
}

这将告诉 Composer 指定命名空间文件的位置。在我们的例子中,Composer 将能够加载我们的 PackageUpdater 类。

注意: 关于 autoload 部分的更多信息可以在这里找到 here

脚本

将以下条目添加到 scripts 部分中。

"scripts": {
   "pre-package-install": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "post-package-install": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "pre-package-update": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "post-package-update": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "pre-package-uninstall": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "post-package-uninstall": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent"
}

上述操作将确保以下 PackageEvents 可以被转发

  • pre-package-install
  • post-package-install
  • pre-package-update
  • post-package-update
  • pre-package-uninstall
  • post-package-uninstall

注意: 关于 scripts 部分的更多信息可以在这里找到 herethere

配置

必须在 extra 部分的 dependency-scripts 下添加配置。

参数

示例

"extra": {
   "dependency-scripts": {
      "run": true,
      "trust": [ "dummy"
               , "foobar" ]
   }
}

注意: 关于 extra 部分的更多信息可以在这里找到 here

我需要在包的 composer.json* 文件中放入什么内容?

现在您可以填充自己的 scripts 部分了。

请注意: autoloads 部分中的路径必须相对于您的包位置。

有用的链接