letudiant/composer-shared-package-plugin

此composer插件允许您通过符号链接在项目之间共享选定的包。

安装数: 48,040

依赖项: 1

建议者: 0

安全性: 0

星标: 165

关注者: 13

分支: 10

类型:composer-plugin

4.0.1 2017-10-19 14:15 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:37:28 UTC


README

Code Climate Scrutinizer Code Quality Build Status Test Coverage

此composer插件允许您通过创建符号链接在项目之间共享您选择的包。
所有共享的包都将位于所有项目的同一个专用目录中(按版本排序),并在您的项目上创建一个符号链接目录容器(默认为 vendor-shared)。

此插件将提高您的工作流程,以避免在 vendor 文件夹中工作,或避免强制您将包推送到其他项目以进行工作/测试。

工作原理

共享包可以通过两种方式标记

  • 通过在根项目 composer.json 中设置额外配置 package-list 并包含所选包的名称 (仅适用于 >= 2.x 版本)
  • 通过将 composer.json 包的 type 设置为 shared-package <= 1.x 版本的方法,在 2.x 上仍然有效)

如果此composer插件在根项目 composer.json 中是必需的:包将被下载到您提供的专用依赖项目录中,并在项目的 vendor-shared 目录中创建符号链接 (默认)

此插件允许您通过创建以包版本命名的子目录(例如,dev-master、dev-develop、1.0.x-dev等)同时为包的多个版本工作。

在依赖项源目录中创建一个 packages.json 文件,以了解哪些项目使用包版本,并在Composer卸载过程中,如果没有项目似乎使用它,则可以询问您是否要删除版本目录。

安装

步骤 1:编辑您的根composer.json

向您的根项目 composer.json 中添加此 require (仅在开发中使用)

// composer.json (project)
{
    "require-dev": {
        "letudiant/composer-shared-package-plugin": "~2.0"
    }
}

注意:此插件在生产模式下运行良好,但它是为开发目的而创建的。

步骤 2:设置您的依赖项供应商路径

您的依赖项供应商路径是所有共享包将被下载的位置。此路径应位于所有项目的同一级别(或更高)。
如果您的IDE无法处理符号链接,您可以使用此目录来处理您的开发包。否则,您可以直接在符号链接上使用现代IDE(PHP Storm、SublimeText等)。

向您的根项目 composer.json 中添加此额外配置

// composer.json
{
    "extra": {
        "shared-package": {
            "vendor-dir": "/path/to/your/dependencies/directory"
        }
    }
}

注意:您可以传递相对路径(例如 foo/bar)或绝对路径(以 "/" 开始:例如 /foo/bar)。
如果您的路径是相对的,则符号链接目录的基本路径也将是相对的。

注意对于虚拟机用户:如果您的主机机器依赖项目录路径与虚拟机不同,您可以手动覆盖符号链接目录的基本路径,使用配置 symlink-base-path,有关更多信息,请参阅 所有可用配置 页面。

步骤 3:选择您要共享的包

在您的包中,在 composer.json 文件中添加您想要在项目间共享的包

// composer.json
{
    "extra": {
        "shared-package": {
            "vendor-dir": "/path/to/your/dependencies/directory",
            "package-list": [
                "foo/bar",
                "bar/*"
            ]
        }
    }
}

注意:如您所见,您可以使用通配符 * 来传递包名。因此,在这个例子中,所有以 bar/ 开头的包都将被共享。注意²:您可以将包名设置为 * 来共享所有包。

步骤 4:重新安装您的依赖项

如果您已经安装了项目依赖项,您必须完全删除您的 vendor/ 目录和 composer.lock 文件。
运行 composer install 命令。

您应该会看到一个名为 vendor-shared 的新文件夹,其中包含所有共享包的符号链接。

步骤 5:使用 require-dev

您可以通过在 require-dev 中设置开发版本来避免在两个项目中有两个 composer.json 文件,同时将您的依赖项设置在稳定版本(~x.x.x)上,并在开发环境中使用您正在工作的版本,如下所示

// composer.json (project)
{
    "require": {
        "acme/foo-bar": "~1.0"
    },
    "require-dev": {
        "acme/foo-bar": "dev-develop as 1.0"
    }
}

这样,您将在开发环境中使用开发版本,在生产环境中使用稳定版本。

注意:别名 * as 1.0 可以避免 Composer 版本解析器错误,因为默认情况下不处理这种行为。
注意²:Composer 并未设计用于与开发版本/分支一起使用,因此当您运行 composer install 时,当前包分支的 HEAD 提交将标记在您的 composer.lock 文件中。
因此,您下次在开发环境中运行此命令时,如果您已经有一个 composer.lock 文件,Composer 将检出标记的提交而不是分支的新 HEAD (如果您创建了新的提交):**您的共享包可能不会是最新的**。为了避免这种行为,请阅读“如何使用 - 仅更新您的包”。

结构生成示例

这里有一个完整的示例。我们自己的共享包名为 acme/foo-bar

// composer.json (project)
{
    "require": {
        "letudiant/composer-shared-package-plugin": "~1.0",
        "symfony/console": "~2.6",
        "acme/foo-bar": "~1.0"
    },
    "require-dev": {
        "acme/foo-bar": "dev-develop as 1.0"
    },
    "extra": {
        "shared-package": {
            "vendor-dir": "../composer-dependencies",
            "package-list": [
                "acme/foo-bar"
            ]
        }
    }
}

使用这个 composer.json,结构将如下所示

|-- packages.json
|-- composer-dependencies/
|   +-- acme/
|       +-- foo-bar/
|           +-- dev-develop/
|               |-- src/
|               |-- composer.json
|           +-- ...
+-- project/
+-- src/
+-- vendor/
|   +-- symfony/
|       +-- console/
|           +-- ...
|-- vendor-shared/
|   +-- acme/
|       +-- foo-bar/ (symlink to "../../../composer-dependencies/acme/foo-bar/dev-develop/")
+-- ...

使用方法(和已知问题)

此插件实现了一种由 Composer 处理的新行为,因此存在一些已知问题。以下是解决这些问题的方法

所有可用配置

查看所有可用配置文档

报告问题或功能请求

请随时在问题跟踪器中提出问题、分叉此项目或建议一个出色的功能。

变更日志

3.1.0

  • 根据babwar的建议实现环境变量,以允许覆盖 composer.json 文件中的默认配置 - 更多信息

3.0.0 :

  • 使用 getInstallPath 方法修复 Composer 中的 BC 更新。

2.0.0 :

  • 通过配置 package-list 实现选择要共享的每个包的可能性的可能性 - 更多信息
  • 删除稳定/开发版本的约束条件。现在共享包也将在稳定版本(标签)上共享。

1.2.0 :

  • 重写安装程序,安装程序选择过程现在在一个专门的类中。
  • 实现新的 symlink-enabled 配置,以允许启用/禁用符号链接创建过程 - 更多信息

1.1.0 :

  • 根据philbates35的建议实现新的symlink-base-path配置,允许VM用户覆盖符号链接目录的基本路径,请参阅问题 - 更多信息

致谢

L'Étudiant

此插件项目由L'Etudiant维护。
Composer项目由Nils Adermann和Jordi Boggiano维护,更多信息请参阅https://github.com/composer/composer#authors

许可证

此插件采用MIT许可,更多信息请参阅LICENSE文件
您还可以阅读Composer许可以获取更多信息。