piwi/composer-symlinker

该包最新版本(v1.0.0)没有可用的许可信息。

一个将包作为本地符号链接安装的Composer插件

安装次数: 1,146

依赖者: 0

建议者: 0

安全性: 0

星标: 18

关注者: 2

分支: 6

类型:composer-plugin

v1.0.0 2015-03-15 09:49 UTC

This package is not auto-updated.

Last update: 2024-09-19 05:30:16 UTC


README

这是一个Composer插件,可以将包作为本地符号链接安装。

此插件是使用符号链接将本地包作为依赖项的临时实现,以便进行并行工作过程。关于(有注释的)问题的描述,请参阅composer/composer#1299

用法

要使用它,只需将其添加到您的composer.json中的依赖项

"piwi/composer-symlinker": "dev-master"

您必须将相关的本地路径或包定义为extra配置条目

  • local-dirs:在搜索包的本地版本时扫描的本地路径列表;最终的包路径将使用vendor/package完成;
  • local-packages:一个包含vendor/package => local_path项的数组;
  • local-vendors:要限制本地扫描的供应商列表。
"extra": {
    "local-dirs": [
        "/my/absolute/local/path1",
        "/my/absolute/local/path2"
    ],
    "local-vendors": [
        "vendor1",
        "vendor2"
    ],
    "local-packages": {
        "vendor/package1": "/my/absolute/path/to/vendor/package1",
        "vendor/package2": "/my/absolute/path/to/vendor/package2"
    }
}

Windows用户警告

该插件使用PHP内部的symlink()函数。有关Windows的限制,请参阅手册。

快速教程

假设我们想要在一个名为MyProject的项目上工作,基于三个依赖项:MyPackage1MyPackage2(它们是我们的一些包),以及一个第三方ExternalPackage(它不是)。假设我们的本地主机架构如下

[DOCUMENT_ROOT]
|
|projects/
|-------- MyVendor/
|----------------- MyPackage1/      // this is a clone of MyVendor/MyPackage1
|
|MyPackage2/                        // this is a clone of MyVendor/MyPackage2
|
|MyProject/                         // this is the project we currently work on
                                    // which depends on other three packages

注意:MyVendor/MyPackage1MyVendor\MyPackage2必须在某个Composer仓库中已存在,才能被Composer认为是安装或符号链接的对象。通常,包将通过Packagist可访问。但如果它们仅是本地(没有已配置的仓库),则需要在您的composer.json中添加一个本地的一个。它可能看起来像这样

  "repositories": [
    {
      "type":"vcs",
      "url":"/path/to/DOCUMENT_ROOT/projects/MyVendor/MyPackage1"
    }
  ]

由于我们既要工作于MyProject又要工作于其依赖项MyPackageX,我们通常会首先使用Composer安装依赖项(作为硬拷贝),以便创建一个有效的autoload.php,然后我们会手动将这些硬拷贝替换为我们的MyPackage1MyPackage2的克隆的本地符号链接...

该插件可以为我们完成这项工作,只要我们很好地配置它,并强制Composer在安装依赖项时使用它。

强制Composer在安装依赖项时使用该插件的一种常见方式是将它包含在其require语句中。在我们的情况下,这并不相关,因为我们只想用它来构建我们的本地环境(它不应该是其他用户的必需品)。一个好的方法是为我们的项目创建一个“仅开发”的Composer配置文件,这样我们就可以在我们的环境中使用插件安装本地依赖项,但让最终用户有“真实”的行为(默认行为)。

我们的“仅开发”composer.json可能如下所示

"require": {
    "piwi/composer-symlinker": "1.*"
},
"require-dev": {
    "MyVendor/MyPackage1": "dev-master",
    "MyVendor/MyPackage2": "dev-master",
    "OtherVendor/ExternalPackage": "dev-master"
},
"extra": {
    "local-dirs": "/path/to/DOCUMENT_ROOT/projects/",
    "local-packages": {
        "MyVendor/MyPackage2": "/path/to/DOCUMENT_ROOT/MyPackage2"
    }
}

这样,我们首先可以运行

$ composer install --no-dev

来安装插件,然后

$ composer update

将使用它来安装所有包。

我们的最终vendor目录应该是这样的

[vendor]
|
|MyVendor/
|--------- MyPackage1   => /path/to/DOCUMENT_ROOT/projects/MyVendor/MyPackage1 (symlink)
|--------- MyPackage2   => /path/to/DOCUMENT_ROOT/MyPackage2 (symlink)
|
|OtherVendor/
|----------- ExternalPackage/ (hard copy)

并且我们的自动加载器仍然有效。