2017-11-10 102 views
0

我试图找到一种正确的方法来强制作曲者编译为 符号链接本地包。强制作曲者将符号链接本地包

我知道有一个问题How to force Composer to download a local package?但它不能回答我的问题。我需要确保它按预期工作,因为我将在CI工作流程中使用它。

有项目的composer.json像:

{ 
    "name": "Some project", 
    "type": "project", 
    "minimum-stability": "dev", 
    "prefer-stable": true, 
    "repositories": [{ 
     "type": "path", 
     "url": "packages/*/*" 
    }] 
} 

和包装的composer.json(包/样本/包):

{ 
    "name": "Sample package", 
    "version": "1.0.0" 
} 

我们假设:

  • sample/package:1.0.0发表在packagist(提交aaaaaa) - 与未改性composer.json
  • sample/package本地被检查出在提交bbbbbb
  • 我不能修改versionsample/package的本地

命令1:

$ composer require sample/package 

包是f蚀刻自packagist(版本1.0.0,提交aaaaaa)。

命令2:

$ composer require sample/package:@dev 

包从本地版本的供应商目录符号链接(版本1.0.0,提交bbbbbb,符号链接)。

的问题是:

  1. 为什么命令1个下载包从packagist尽管minimum-stability选项?版本约束@dev可让您执行不同的稳定性,但已使用项目配置将其降至dev
  2. 命令2在每种情况下创建符号链接到本地​​包?
  3. 有没有比命令2更好的方法来确保本地软件包得到符号链接?

回答

1

为什么尽管最小稳定性选项,命令1从packagist下载软件包?版本约束@dev可以让你执行不同的稳定性,但它已经下达到使用项目配置进行开发。

我最好的教育猜测是,当composer require sample/package没有提供版本约束时,Composer仍然会尝试找到稳定的版本进行安装,因为"prefer-stable": true。当您将此选项设置为false(或明确提供@dev版本的包的版本约束)时,您应该使用最新的可用版本(提交bbbbbb上的dev-master)看到Composer。

在任何情况下,命令2是否会为本地包创建符号链接?

不是在任何情况下。您可以使用"symlink": true选项强制Composer始终使用符号链接包。

https://getcomposer.org/doc/05-repositories.md#path

本地包将如果可能被符号链接,在这种情况下,在控制台中的输出将来自../../packages/my-package读取符号链接。如果符号链接不可行,则将复制软件包。在这种情况下,控制台将输出从../../packages/my-package镜像。

而不是默认的回退策略,您可以强制使用符号链接"symlink": true或镜像与"symlink": false选项。从单一存储库部署或生成包时,强制镜像可能很有用。

有没有比命令2更好的方式来确保本地软件包得到符号链接?

您应该避免从composer.json中删除"prefer-stable": true,因为这会影响所有依赖关系。

我建议只确保您明确要求@dev版本为sample/package并且为本地存储库设置"symlink": true。这会导致类似于:

{ 
    "name": "Some project", 
    "type": "project", 
    "minimum-stability": "dev", 
    "prefer-stable": true, 
    "repositories": [{ 
     "type": "path", 
     "url": "packages/*/*", 
     "symlink": true 
    }], 
    "require": { 
     "sample/package": "@dev" 
    } 

} 
相关问题