figdice/asseteer

Composer 安装后的资源复制脚本

dev-master 2015-10-09 09:29 UTC

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.jsonscripts 部分中挂钩 post-update-cmd 事件。

  "scripts" :{
    "post-update-cmd": [
      "asseteer\\AssetInstaller::postUpdate"
    ],
    "post-install-cmd": [
      "asseteer\\AssetInstaller::postInstall"
    ]
  }