aryelgois / composer-front-end

一个使用 Composer 安装前端文件的实用工具

v0.1 2017-12-11 00:49 UTC

This package is not auto-updated.

Last update: 2024-09-28 03:11:19 UTC


README

一个使用 Composer 安装前端文件的实用工具

简介

默认情况下,Composer 会将所有包文件安装到 vendor 目录下。
这对于 Composer 的主要用途来说是可以的:PHP 依赖管理工具。

但通常,PHP 项目会涉及其他语言,如前端(JavaScript、CSS 及其派生语言)。

您可以使用不同的包管理器来处理每种类型的文件,但这将是一项庞大的工作,我认为有一个统一的工具会更好。

这就是这个包的用武之地。您将使用 Composer 获取包含前端资产的存储库,然后该包会将它们符号链接到相应的目录。

安装

在您的项目内部运行以下命令

composer require aryelgois/composer-front-end

为了防止在全新安装期间 Composer 出现警告,请将包条目保留在 composer.json 中 require 指令的开头。

设置

将以下内容添加到您的 composer.json 中

{
    "scripts": {
        "post-package-install": "aryelgois\\Composer\\FrontEnd::postPackageInstall",
        "front-end-refresh": "aryelgois\\Composer\\FrontEnd::refresh"
    },
}

现在,每次您安装带有前端文件的新包时,它们都将被符号链接。

如果您已经安装了一些前端包,请运行 composer front-end-refresh 以在每个 vendor 包中查找。

配置文件

这些 JSON 文件用于指定应符号链接哪些文件以及链接到何处。

您可以使用任何您喜欢的键作为 file_group,但在 vendor 配置和您的项目中必须相同。

frontend.json

在 vendor 包中使用。

它包含一个映射,将 'file_group': ['file'] 的文件映射到应符号链接到您的项目中的文件。
路径相对于 vendor 包目录。

不是 vendor/,而是 vendor/some/package/

示例

{
    "css": "assets/superduperstyle.css",
    "js": [
        "main.js",
        "src/myawesomescript.js"
    ]
}

可以指定单个文件而不使用数组。

frontend-config.json

在您的项目中使用。

它可以包含以下键

directories

(必需)

一个映射,将 'file_group': 'directory' 用于包含来自其他包的符号链接。
路径相对于根目录。

packages

(可选)

一个映射,将 'package/name': files 用于要符号链接的文件。内容将与 frontend.json 中的内容相同。

当供应商不包含 frontend.json 时很有用。

它替换了 frontend.json

structure

(可选)

定义了每个文件_group 目录中符号链接的放置方式

  • nest: 符号链接将在 vendor/package/ 内部创建,在指定的目录中。这有助于处理同名文件。
  • flat: 符号链接将直接放在定义的目录中。

structure_default

(可选)

定义了所有目录的默认结构。如果没有指定,则使用 nest

示例

{
    "directories": {
        "css": "public/css",
        "js": "public/js"
    },
    "structure": {
        "css": "flat",        
    }
}

public/ 是文档根目录

注意

  • 您仍然需要手动添加标记来在网页中使用符号链接的文件

    <head>
        <link rel="stylesheet" href="/css/superduperstyle.css" />
    </head>
    <body>
        <script src="/js/some/package/myawesomescript.js"></script>
        <script src="/js/some/package/main.js"></script>
    </head>
    
  • 即使使用 nest,所有符号链接都是扁平化的,即供应商包中的文件结构不会保留。

待办事项

  • 为 frontend.json 添加路径展开功能