figdice / asseteer
Composer 安装后的资源复制脚本
Requires
- php: >=5.4
This package is not auto-updated.
Last update: 2024-09-25 12:20:50 UTC
README
一个可配置的 Composer 安装后钩子,用于将外部资源复制到 PHP 项目的公共 HTTP 位置
为什么
您的 PHP 应用程序使用外部静态资源(js/css/images/fonts),这些资源是公开可用的(例如 jQuery、Bootstrap 等)。您可以使用 Composer 将静态文件作为项目的常规依赖项处理,但需要将它们放置在您的 HTTP 根目录树中,而不是它们的 Composer 供应商位置。
Asseteer 是您项目的依赖项,您可以在 "composer install" 目标时调用它,以执行文件复制操作。
如何
您从 composer.json
文件启动 Asseteer
- 将外部文件声明为常规
require
依赖项。 - 可选地,在
repositories
部分定义它们的特定信息(下载 URL)。 - 然后,在
extra
部分配置复制操作。 - 最后,在
scripts
部分调用post-install-cmd
钩子。
require
部分
首先,将 figdice/asseteer
作为您项目的依赖项包括,以激活安装后钩子。
"require": { "figdice/asseteer": "dev-master", ... "static-assets/jquery": "2.1.3", "static-assets/bootstrap-css": "3.3.5", "static-assets/bootstrap-js": "3.3.5", ... }
现在,假设您的应用程序中的 HTML 文件使用 jQuery 和 Bootstrap:列出您的静态公共依赖项,一个接一个。在这个例子中,“static-assets” 是任意使用的。它只是资产文件的虚拟供应商文件夹名称,Composer 将将其下载到那里。
repositories
部分
大多数时候,您的远程静态文件(例如标准压缩的 jQuery)不是作为 Packagist/Composer 软件包提供的。您必须告诉 Composer 明确下载它们。
"repositories":[ ... { "type": "package", "package": { "name": "static-assets/jquery", "version": "2.1.3", "dist": { "url": "https://code.jqueryjs.cn/jquery-2.1.3.min.js", "type": "file" } } }, ... ]
上述指令将使 Composer 下载 url
属性中指定的文件,并将其放置在项目的 vendor/static-assets/jquery
文件夹中。
为每个外部资产依赖项重复 require
声明和 repositories
项目。
extra
部分
"extra": { "post-install-asseteer": [ { "vendor": "static-assets", "target": "app/http/js", "filters": [ "\\.js$" ] },{ "vendor": "static-assets", "target": "app/http/css", "filters": [ "\\.css$" ] }, ... ] }
指定 post-install-asseteer
额外部分,它是一个递归过滤的复制指令数组。每个项目指定
- 一个
vendor
子文件夹,其中 Composer 已下载文件, - 一个
target
属性,这是您希望将静态资源供浏览的公共 HTTP 文件夹, - 以及一个包含要复制的正则表达式模式的
filters
数组。
scripts
部分
这是您将 Asseteer 作为 Composer 生命周期中的钩子插入的位置。
"scripts" :{ "post-install-cmd": [ "asseteer\\AssetInstaller::postInstall" ] }
更多
有时您需要从同一软件包下载多个文件(例如,从 Foundation Icon Font 3 下载 CSS 和各种字体文件)。目前,Composer 不支持将文件分组到单个 Dist 软件包中。
您可以使用 Asseteer 来完成这项工作,通过在 repositories
中的软件包定义中使用 extra
属性。
"repositories": [ { "type": "package", "package": { "name": "tradonline-assets/foundation-icons", "version": "3.0.0", "dist": { "url": "http://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.css", "type": "file" }, "extra": { "asseteer": [ "http://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.woff", "http://cdnjs.cloudflare.com/ajax/libs/foundicons/3.0.0/foundation-icons.ttf" ] } } } ]
然后,您需要在 composer.json
的 scripts
部分中挂钩 post-update-cmd
事件。
"scripts" :{ "post-update-cmd": [ "asseteer\\AssetInstaller::postUpdate" ], "post-install-cmd": [ "asseteer\\AssetInstaller::postInstall" ] }