liqueurdetoile/wordpress-bundler

Wordpress bundler完全自动化WordPress插件和主题的生产发布,并提供方便的工具来配置它们

1.0.2 2023-11-09 00:44 UTC

This package is auto-updated.

Last update: 2024-09-09 02:51:42 UTC


README

Liqueur de Toile

WordpressBundler是一个用PHP编写的wordpress项目打包器,可以生成干净的生成输出。使用WordpressBundler,您可以轻松地将所有PHP和JS代码保存在单个存储库中,进行开发,最终创建一个干净的捆绑包,仅嵌入生产所需的元素。

为什么选择WordpressBundler?

在PHP的早期年份,所有动态页面渲染都是在服务器端完成的,由于PHP没有编译步骤,源代码也是生产代码。

现在,PHP和JavaScript变得更为复杂。此外,开发代码和依赖项现在广泛分布,尽管在生产中它们是无用的。在配置不良的服务器上,它们甚至可能构成一些安全威胁。由于捆绑和优化代码的构建步骤,JS包通常依赖于打包器,例如webpack,来生成生产构建。

例如,假设您正在创建一个需要构建步骤(例如新的Gutenberg块)的脚本WordPress插件。这很快就会变成一个噩梦来组织。如果您选择拥有多个存储库,您必须注意级联更新以确保您的插件有最新的脚本版本。如果在一个monorepo中,您将嵌入一堆无用且可能危险的东西到您的插件或主题中。此外,当在WordPress环境中使用Composer依赖项时,您可能会加载由另一个插件加载的错误版本,这会导致问题。

使用WordpressBundler,您可以轻松地将所有PHP和JS代码保存在单个monorepository中,进行开发,最终创建一个干净的捆绑包,仅嵌入生产输出。

类似于JS打包器(如webpack),此工具负责生成插件或主题的生产版本,作为一个文件夹或ZIP存档,是否捆绑Composer依赖项。它还附带了humbug/php-scoper优秀的包来混淆依赖项命名空间并避免冲突。

安装打包器

composer require liqueurdetoile/wordpress-bundler --dev

运行打包器

使用默认配置,打包器将

  • 使用项目的根目录作为基本路径
  • 包含项目根文件夹中的所有文件和文件夹,除非是VCS文件夹或由VCS(Git、Mercurial...)排除的文件夹
  • 将这些文件作为ZIP存档导出到/dist文件夹

如果您只想排除一些文件或文件夹,只需在项目根目录创建一个.wpignore文件,并将要排除的模式的添加到其中。语法与.gitignore文件相同。

此默认配置非常适合不需要在捆绑中包含任何依赖项或依赖于Composer自动加载器进行内部目的的项目。

请阅读下面的打包器配置,以获取详细配置设置的信息

作为Shell

vendor/bin/wpbundler bundle

有几个选项可用

  • --config <file>-c <file> : 请求加载存储在文件中的附加配置。您可以通过这种方式加载多个配置。
  • --log <1-7>-l <1-7> : 覆盖 bundler 记录配置并启用给定级别的记录。
  • --dry : 请求进行干运行
  • --show-entries-only : Bundler 将根据其配置输出要捆绑的条目

程序化

只需创建一个 \Lqdt\WordpressBundler\Bundler 的实例并调用其 bundle 方法。下面是如何自定义配置的示例。

配置打包器

配置文件

调整 bundler 配置的最简单方法是为配置文件设置。默认情况下,bundler 总是首先查看项目 composer.json 中的 extra.wpbundler 键以获取自定义配置。作为替代,您可以创建一个外部文件来存储设置,并通过命令行的 --config 选项或程序化使用时通过 Bundler::loadConfigFile 方法来调用它。

为确保配置的完整性,附加配置总是与当前配置 合并。因此,只需提供设置中更新的键。

为了简化创建配置文件的过程,您可以使用以下命令初始化默认配置进行修改:

# Generates config at extra.wpbundler key in project composer.json
vendor/bin/wpbundler init

# Generates an external file
vendor/bin/wpbundler init -t bundler.config.php

# Generates an external file and will stores config at bundler key in that file
vendor/bin/wpbundler init -t config.json -k bundler

配置文件的语言根据其扩展名推断,可以是任何以下之一:PHP (.php)、JSON (.json)、XML (.xml)、INI、(.ini) 或 YAML (.yml)。YAML 需要 PECL 模块 yaml 被加载。

程序化配置

您可以直接向 bundler 构造函数提供自定义配置或使用 Bundler::setConfig。当前配置可以通过 Bundler::getConfig 方法检索。

打包器设置

以下列出了配置的可用选项及其默认值:

[
    'log' => true,
    'loglevel' => 5,
    'basepath' => null,
    'finder' => [
        'exclude' => [],
        'depth' => 0,
        'ignoreDotFiles' => true,
        'ignoreVCS' => true,
        'ignoreVCSIgnored' => true,
    ],
    'composer' => [
        'install' => false,
        'dev-dependencies' => false,
        'phpscoper' => false,
    ],
    'tmpdir' => null,
    'output' => 'dist',
    'clean' => true,
    'zip' => 'bundle.zip',
];

日志记录

bundler 可以根据其参数将日志输出到控制台。它依赖于 laminas/laminas-log 包。

如果将 log 选项设置为 false,则不会输出任何日志。 loglevel 选项遵循 BSD syslog 协议并期望 0 到 7 之间的 int 值。有关更多信息,请参阅 Laminas log

注意:您可以通过 Bundler::getLoggerBundler::setLogger 方法以编程方式访问和更改 bundler 日志记录器实例。

基本路径

基础路径由 bundler 用于解析设置中存储的任何相对路径。bundler 的基础路径自动设置为当前项目根文件夹,这适用于大多数用例。

如果需要,您可以指定 bundler 的不同基础路径。如果提供了相对路径,它将相对于项目根文件夹进行解析。

查找器

bundler 集成了 symfony/finder 包来分析文件系统并提取要捆绑的条目。默认设置下,所有位于 bundler 基础路径中的文件和文件夹都将集成到捆绑包中,除了 VCS 自己的和忽略的文件和文件夹。

finder 设置键下可用的设置包括:

我故意将深度限制为0,以加快处理速度,因为复制整个文件夹比复制每个文件和子文件夹要快得多。有关更多信息,请参阅加快捆绑速度

实际选项可以满足99%的需求,但有一些限制,例如Finder组件不能根据路径排除文件。有关更多详细信息,请参阅组件自身文档

注意:您可以通过Bundler::getFinderBundler::setFinder方法以编程方式访问和更改捆绑器查找器实例。

Composer

您可以让捆绑器在捆绑之前执行清洁安装,以在最终捆绑中嵌入依赖项并允许使用Composer自动加载器。如果您正在使用外部依赖项,建议同时使用PHP-Scoper以避免WordPress部署中插件或主题之间包版本冲突。

composer设置键下可用的设置包括

  • install:如果设置为true,捆绑器将在导出的捆绑包中运行composer install
  • dev-dependencies:如果设置为true,捆绑器还将包括开发依赖项在导出的捆绑包中。
  • phpscoper:请参阅下一节

PHP-Scoper

humbug/php-scoper提供了一种方便的方式来避免WordPress部署中插件或主题之间包版本冲突。它将更新所有命名空间,捆绑器将负责更新自动加载器。

如果您想使用自定义配置,可以在捆绑器基本路径中创建一个scoper.inc.php文件,该文件将自动加载。

输出和临时文件夹

可用的设置包括

  • tmpdir:默认情况下,捆绑器使用sys_get_temp_dir内置PHP函数来定位其自己的临时文件夹的根目录。您可以选择提供另一个文件夹的绝对路径
  • output:捆绑包输出文件夹的路径。如果为相对路径,则将从捆绑器基本路径解析
  • clean:如果设置为true,则在每次捆绑开始时清空输出文件夹
  • zip:如果设置为true,则将所有捆绑条目收集到一个名为此选项的单一ZIP归档中。名称扩展名可选。

加速捆绑

您可以通过一些方法来提高捆绑速度

  1. 将您的文件组织得井井有条,以便仅在根级别处理过滤模式。复制整个文件夹比处理每个嵌套文件要快得多
  2. 如果您没有使用Composer自动加载器,请检查是否已通过将composer.install设置为false来禁用安装步骤,并过滤掉任何composer/dev文件和文件夹
  3. 如果您仅使用自己的包和命名空间,并确保它不会与其他(例如供应商前缀)冲突,则无需使用php-scoper

贡献或报告错误

WordpressBundler欢迎任何贡献和相关PR。请按照贡献指南操作。

任何错误或建议都应在该存储库问题跟踪器中提出。

变更日志

  • 1.0.0:初始发布

接下来是什么?

有许多事情可以提高Wordpress Bundler。例如,添加一个check命令来验证根据捆绑器配置是否找到模式。

请随意提出改进建议/提交PR!