wpify / wordpress-scoper
Composer 插件,用于将 WordPress 和 WooCommerce 依赖项的作用域限制在 WordPress 插件和主题中。
Requires
- composer-plugin-api: ^2.1
- humbug/php-scoper: 0.18.3
- jetbrains/phpstorm-stubs: ^v2022.3
- woocommerce/action-scheduler: ^3.5.4
Requires (Dev)
- composer/composer: ^2.5.5
- johnpbloch/wordpress: ^6.2.0
- nikic/php-parser: ^v4.15.4
- wpackagist-plugin/woocommerce: ^7.6.0
- yahnis-elsts/plugin-update-checker: ^v4.13
This package is auto-updated.
Last update: 2023-04-21 10:39:33 UTC
README
在您的 WordPress 插件或主题中使用 Composer 可以受益。但也存在与其他插件或主题依赖项冲突的风险。幸运的是,一个名为 PHP Scoper 的出色工具将所有需要的依赖项添加到您的命名空间中,以防止冲突。不幸的是,配置相当复杂,因此我们创建了这个 Composer 插件,以简化 WordPress 项目中的作用域设置。
PHP Scoper 的问题是它还会限制全局函数、常量和类的作用域。通常,这是您想要的,但这也意味着 WordPress 函数、类和常量也会被限制。此 Composer 插件解决了这个问题。它有一个最新的数据库,其中包含我们想要保留未限制的所有 WordPress 和 WooCommerce 符号。
要求
- PHP 8.0+
使用方法
配置需要创建
composer-deps.json
文件,其结构与composer.json
文件相同,但仅用于作用域依赖项。您不想作用域的依赖项将添加到composer.json
。将
extra.wpify-scoper.prefix
添加到您的composer.json
,其中您可以指定依赖项所在的命名空间。所有其他配置选项(folder
、globals
、composerjson
、composerlock
)都是可选的。在开发环境中使用作用域的最简单方法是安装 WPify Scoper 作为开发依赖项。在每次执行
composer install
或composer update
后,所有在composer-deps.json
中指定的依赖项都将为您进行作用域设置。
composer.json
的示例及其默认值
{
"require-dev": {
"wpify/scoper": "^2.4",
"example/dependency": "^1.0"
},
"extra": {
"wpify-scoper": {
"prefix": "MyNamespaceForDeps",
"folder": "deps",
"globals": [
"wordpress",
"woocommerce"
],
"composerjson": "composer-deps.json",
"composerlock": "composer-deps.lock"
}
}
}
作用域依赖项将位于您的项目
deps
文件夹中。您必须将作用域自动加载器与 composer 自动加载器一起包含在内。之后,您可以使用命名空间使用您的依赖项。
示例 PHP 文件
<?php
require_once __DIR__ . '/deps/scoper-autoload.php';
require_once __DIR__ . '/vendor/autoload.php';
new \MyNamespaceForDeps\Example\Dependency();
部署
当您想要部署项目时,您需要作用域您的依赖项,但不包括开发依赖项。这可以通过以下命令实现
composer install --optimize-autoloader
composer install --no-dev --optimize-autoloader
第一个命令安装所有依赖项并运行 scoper,第二个命令删除包括 scoper 在内的开发依赖项。之后,您可以手动部署文件。
使用 Gitlab CI 部署
要使用 WPify Scoper 与 Gitlab CI,您可以向您的 .gitlab-ci.yml
文件添加以下作业
composer:
stage: build
image: composer:2
cache:
paths:
- .composer-cache/
artifacts:
paths:
- ./vendor
- ./deps
expire_in: 1 week
before_script:
- PATH=$(composer global config bin-dir --absolute --quiet):$PATH
- composer config -g cache-dir "$(pwd)/.composer-cache"
- composer global require wpify/scoper:^2
script:
- composer install --no-dev --optimize-autoloader --ignore-platform-reqs
使用 Github Actions 部署
要使用 WPify Scoper 与 Github Actions,您可以添加以下操作
name: Build vendor
jobs:
install:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Cache Composer dependencies
uses: actions/cache@v2
with:
path: /tmp/composer-cache
key: ${{ runner.os }}-${{ hashFiles('**/composer.lock') }}
- name: Install composer
uses: php-actions/composer@v6
with:
php_version: 8.0
php_extensions: json
version: 2
dev: yes
progress: no
args: --optimize-autoloader
- name: Remove dev dependencies
run: |
composer install --no-dev --optimize-autoloader
- name: Archive plugin artifacts
uses: actions/upload-artifact@v2
with:
name: vendor
path: |
deps/
vendor/
高级配置
PHP Scoper 有许多 配置选项。您可以通过在项目根目录创建 scoper.custom.php
文件来修改此配置数组。该文件应包含 customize_php_scoper_config
函数,其中第一个参数是预配置的配置数组。预期输出是有效的 PHP Scoper 配置数组。
示例 scoper.custom.php
文件
<?php
function customize_php_scoper_config( array $config ): array {
$config['patchers'][] = function( string $filePath, string $prefix, string $content ): string {
if ( strpos( $filePath, 'guzzlehttp/guzzle/src/Handler/CurlFactory.php' ) !== false ) {
$content = str_replace( 'stream_for($sink)', 'Utils::streamFor()', $content );
}
return $content;
};
return $config;
}