wpify/wordpress-scoper

此软件包已被废弃,不再维护。作者建议使用 wpify/scoper 软件包。

Composer 插件,用于将 WordPress 和 WooCommerce 依赖项的作用域限制在 WordPress 插件和主题中。

维护者

详细信息

gitlab.com/wpify/scoper

安装次数: 1,350

依赖项: 0

建议者: 0

安全性: 0

类型:composer-plugin

3.0.1 2023-04-20 12:06 UTC

README

在您的 WordPress 插件或主题中使用 Composer 可以受益。但也存在与其他插件或主题依赖项冲突的风险。幸运的是,一个名为 PHP Scoper 的出色工具将所有需要的依赖项添加到您的命名空间中,以防止冲突。不幸的是,配置相当复杂,因此我们创建了这个 Composer 插件,以简化 WordPress 项目中的作用域设置。

PHP Scoper 的问题是它还会限制全局函数、常量和类的作用域。通常,这是您想要的,但这也意味着 WordPress 函数、类和常量也会被限制。此 Composer 插件解决了这个问题。它有一个最新的数据库,其中包含我们想要保留未限制的所有 WordPress 和 WooCommerce 符号。

要求

  • PHP 8.0+

使用方法

  1. 配置需要创建 composer-deps.json 文件,其结构与 composer.json 文件相同,但仅用于作用域依赖项。您不想作用域的依赖项将添加到 composer.json

  2. extra.wpify-scoper.prefix 添加到您的 composer.json,其中您可以指定依赖项所在的命名空间。所有其他配置选项(folderglobalscomposerjsoncomposerlock)都是可选的。

  3. 在开发环境中使用作用域的最简单方法是安装 WPify Scoper 作为开发依赖项。在每次执行 composer installcomposer 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"
    }
  }
}
  1. 作用域依赖项将位于您的项目 deps 文件夹中。您必须将作用域自动加载器与 composer 自动加载器一起包含在内。

  2. 之后,您可以使用命名空间使用您的依赖项。

示例 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;
}