wecodemore/wp-package-assets-publisher

一个用于发布WordPress可以找到的包的资源的Composer插件。

安装: 188

依赖: 0

建议: 0

安全性: 0

星标: 2

关注者: 4

分支: 0

开放问题: 0

类型:composer-plugin

1.1.0 2023-02-27 07:37 UTC

This package is auto-updated.

Last update: 2024-08-27 10:40:40 UTC


README

PHP Quality Assurance

这是什么

一个用于“发布”WordPress可以找到的包的资源的Composer插件。

了解更多...

在构建基于Composer的“完整网站”时,我们可能需要通过Composer包来包含WordPress代码,但这些代码不是WP插件或主题。

此类包将放置在vendor文件夹中,该文件夹通常位于webroot之外。

这意味着如果此类包包含图像、脚本或样式等资源,浏览器将无法访问它们。

这迫使我们要么编写常规WP插件,要么将vendor文件夹移动到webroot内部。

以上两种解决方案都不是理想的选择,尽管在特定情况下它们可能都可行。

此包提供了一个替代方案:它将此类资源文件链接(或复制)到wp-content/plugins文件夹下,该文件夹可以通过浏览器访问。

由于这是WP标准路径,我们可以使用如plugin_url()之类的函数来获取URL。

工作原理

这是一个提供"wordpress-package"类型的包的自定义安装器的Composer插件。可以通过配置支持其他类型。

安装器不会更改默认Composer安装器安装包的方式,但在默认安装器成功安装包之后,它会查找包的composer.json中的extra.package-assets-paths属性,并将找到的所有路径链接到/wp-content/plugins/.published-package-assets/{vendor}/{name}文件夹。

基于根包的配置确定wp-content基本文件夹。

当使用WP Starter时,其wordpress-content-dir设置就足够作为配置。

当然,即使不使用WP Starter,也可以使用extra.wordpress-content-dir属性。

使用示例

假设一个具有以下composer.json的包

{
    "name": "acme/awesome-package",
    "type": "wordpress-package",
    "require": {
        "wecodemore/wp-package-assets-publisher": "@dev"
    },
    "autoload": {
        "files": [
            "bootstrap.php"
        ]
    },
    "extra": {
        "package-assets": [
            "./public"
        ]
    }
}

现在假设包的文件结构如下

|⎯ 📄bootstrap.php
|⎯ 📄composer.json
|⎯ 📂 public
   |⎯ 📄main.css
   |⎯ 📄main.js

现在,假设上面的包在一个具有以下composer.json的WP Starter项目中需要

{
    "name": "acme/acme-website",
    "type": "project",
    "require": {
		"wecodemore/wpstarter": "^3@dev",
		"roots/wordpress": "6.1.*",
		"acme/awesome-package": "^1.0"
    },
	"config": {
        "allow-plugins": {
            "composer/*": true,
            "wecodemore/*": true,
            "roots/wordpress-core-installer": true
        }
    },
	"extra": {
        "wordpress-install-dir": "./public/wp",
        "wordpress-content-dir": "./public/wp-content",
        "installer-paths": {
            "./public/wp-content/plugins/{$name}/": ["type:wordpress-plugin"],
            "./public/wp-content/themes/{$name}/": ["type:wordpress-theme"],
            "./public/wp-content/mu-plugins/{$name}/": ["type:wordpress-muplugin"]
        }
	}
}

在Composer安装后,我们将找到一个类似以下的结构(仅显示相关部分)

|⎯ 📂 public
|  |⎯ 📂 wp-content
|     |⎯ 📂 plugins
|        |⎯ 📂.published-package-assets
|           |⎯ 📂 acme
|              |⎯ 📂 awesome-package
|                 |⎯ 📂 public
|                    |⎯ 📄main.css
|                    |⎯ 📄main.js
|⎯ 📂 vendor
   |⎯ 📂 acme
      |⎯ 📂 awesome-package
         |⎯ 📄bootstrap.php
         |⎯ 📄composer.json
         |⎯ 📂 public
            |⎯ 📄main.css
            |⎯ 📄main.js

因此,包通常安装在vendor/,但其public/文件夹(已列出在包的extra.package-assets-paths属性中),已链接到public/wp-content/.published-package-assets/acme/awesome-package/public/

多亏了这一点,包的资源现在位于webroot下,因此可以通过浏览器访问。

辅助函数

获取该包资源的完整URL可能很困难。这就是为什么此包提供了一个辅助函数WeCodeMore\packageAssetUrl(),可以在任何地方像这样使用。

$url = WeCodeMore\packageAssetUrl('acme/awesome-package', 'public/main.js');

该函数接受两个参数,第一个是包在它的composer.json中定义的名称,第二个是要检索的资源的相对路径。当然,它只有在请求的路径已配置在包的extra.package-assets-paths属性中,并且因此通过此包“发布”在该位置的情况下才有效。

根配置

目标文件夹

在未使用WP Starter的项目中,仍然可以使用extra.wordpress-content-dir属性来指定要放置发布资源的位置。

或者,可以使用仅根配置 extra.package-assets-publisher.publish-dir

以下是一个使用带有 Bedrock 文件结构 的包的示例

{
    "extra": {
        "package-assets-publisher": {
            "publish-dir": "./web/app/plugins"
        }
    }
}

符号链接或复制

默认情况下,该包尝试符号链接资源路径,如果符号链接失败,则将其复制,类似于 Composer 的做法。

要强制包复制文件,可以使用不同的格式设置 extra.package-assets-publisher.symlink 属性,如下所示

{
    "extra": {
        "package-assets-publisher": {
            "symlink": false
        }
    }
}

要强制包进行符号链接而不是尝试复制,将 extra.package-assets-publisher.symlink 设置为 true

extra.package-assets-publisher.symlink 设置为任何非布尔值,或根本不设置它,将导致默认行为,即尝试符号链接,并回退到复制。

失败硬

默认情况下,当发生失败时,包会打印错误消息,但不会中断 Composer 的安装/更新过程。

要“硬”失败,将 extra.package-assets-publisher.strict 设置为 true

{
    "extra": {
        "package-assets-publisher": {
            "strict": true
        }
    }
}

自定义类型

默认情况下,安装程序仅尝试为类型为 "wordpress-package" 的包发布资源。通过配置,可以支持其他类型,如下所示

{
    "extra": {
        "package-assets-publisher": {
            "types": [
                "wp-library"
            ]
        }
    }
}

注意:此包是自定义类型的 安装程序。通过声明支持类型,我们将覆盖该类型的默认安装程序,这意味着 如果包类型需要使用自定义安装程序,则不应将其添加到本包支持的类型中

包配置覆盖

根选项中的 extra.package-assets-publisher.symlinkextra.package-assets-publisher.strict 都可以在包级别进行覆盖。

这是通过包级别的 extra.package-assets 属性完成的,将其用作对象,如下所示

{
    "extra": {
        "package-assets": {
            "paths": [
                "./public"
            ],
            "options": {
                "symlink": false,
                "strict": true
            }
        }
    }
}

系统要求

许可证

MIT。请参阅 LICENSE 文件。