liqueurdetoile / wordpress-bundler
Wordpress bundler完全自动化WordPress插件和主题的生产发布,并提供方便的工具来配置它们
Requires
- php: >=7.4
- adbario/php-dot-notation: ^3.1
- humbug/php-scoper: ^0.17|^0.18.4
- laminas/laminas-config: ^3.7
- laminas/laminas-log: ^2.15
- mindplay/composer-locator: ^2.1
- nelexa/zip: ^4.0
- symfony/console: ^5.4
- symfony/filesystem: ^5.4|^6.3
- symfony/finder: ^5.4|^6.3
Requires (Dev)
- phpstan/phpstan: ^1.8
- phpstan/phpstan-phpunit: ^1.1
- phpunit/phpunit: ^9.5
- slevomat/coding-standard: ^8.4
- squizlabs/php_codesniffer: ^3.7
- symfony/var-dumper: ^5.4
- vimeo/psalm: ^4.27
This package is auto-updated.
Last update: 2024-09-09 02:51:42 UTC
README
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::getLogger
和Bundler::setLogger
方法以编程方式访问和更改 bundler 日志记录器实例。
基本路径
基础路径由 bundler 用于解析设置中存储的任何相对路径。bundler 的基础路径自动设置为当前项目根文件夹,这适用于大多数用例。
如果需要,您可以指定 bundler 的不同基础路径。如果提供了相对路径,它将相对于项目根文件夹进行解析。
查找器
bundler 集成了 symfony/finder
包来分析文件系统并提取要捆绑的条目。默认设置下,所有位于 bundler 基础路径中的文件和文件夹都将集成到捆绑包中,除了 VCS 自己的和忽略的文件和文件夹。
在 finder
设置键下可用的设置包括:
exclude
:您可以在其中提供一些要排除的模式。它们将被用于向 finder 添加notName
和notPath
约束。depth
:参见 Finder 组件文档。要禁用深度设置,只需将-1
作为值传递。ignoreDotFiles
:参见 Finder 组件文档ignoreVCS
:参见 Finder 组件文档ignoreVCSIgnored
:参见 Finder 组件文档
我故意将深度限制为0,以加快处理速度,因为复制整个文件夹比复制每个文件和子文件夹要快得多。有关更多信息,请参阅加快捆绑速度。
实际选项可以满足99%的需求,但有一些限制,例如Finder组件不能根据路径排除文件。有关更多详细信息,请参阅组件自身文档。
注意:您可以通过
Bundler::getFinder
和Bundler::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归档中。名称扩展名可选。
加速捆绑
您可以通过一些方法来提高捆绑速度
- 将您的文件组织得井井有条,以便仅在根级别处理过滤模式。复制整个文件夹比处理每个嵌套文件要快得多
- 如果您没有使用Composer自动加载器,请检查是否已通过将
composer.install
设置为false
来禁用安装步骤,并过滤掉任何composer/dev文件和文件夹 - 如果您仅使用自己的包和命名空间,并确保它不会与其他(例如供应商前缀)冲突,则无需使用
php-scoper
贡献或报告错误
WordpressBundler欢迎任何贡献和相关PR。请按照贡献指南操作。
任何错误或建议都应在该存储库问题跟踪器中提出。
变更日志
- 1.0.0:初始发布
接下来是什么?
有许多事情可以提高Wordpress Bundler。例如,添加一个check
命令来验证根据捆绑器配置是否找到模式。
请随意提出改进建议/提交PR!