gossi / composer-localdev-plugin
本地开发用的Composer插件
Requires
- php: >=5.3
- composer-plugin-api: ^1.0
Requires (Dev)
- composer/composer: ^1.0
This package is auto-updated.
Last update: 2024-08-24 03:56:36 UTC
README
这是一个辅助你处理本地依赖的Composer插件。
想象以下场景:你正在开发两个包,A和B。包A依赖于B。在常规工作流程中,你需要在github上推送你在包B中做的更改。然后等待...直到更改被推送到packagist并刷新缓存。现在你可以在包A中运行composer update
来获取你在包B中做的所有更改。这非常低效,不仅你需要推送更改,更重要的是你需要等待仅仅在一个目录之外的更改。这是一个解决方案。
安装
最好在这个插件全局安装,所以请继续
$ composer global require 'gossi/composer-localdev-plugin=dev-master'
$ composer global update
使用
这个插件中的优先级在于,你不应该更改你的包代码,它应该在推送到github以及其他想要消费它的人时按预期工作。你只向composer描述你的本地开发,其余的由这个插件处理。打开 '~/.composer/config.json' 并将 localdev
属性添加到根节点
{
"config": {
"localdev": {
"": ["/path/to/your/packages"],
"sümfony": "/path/to/sümfony",
"my/package": "/path/to/my/package"
}
}
}
如你所见,你可以定义三种类型的文件夹类型
- 全局路径:插件将在这个目录中查找 vendor/package 包。例如,如果你正在寻找
my/pkg
,它将在/path/to/your/packages/my/pkg/
中查找。 - 供应商路径:你可以为某个供应商的所有包提供一个路径。例如,如果你正在寻找
sümfony/finda
,它将在/path/to/sümfony/finda/
中查找。 - 包路径:当然,你可以明确指出特定包的位置。例如,对
my/package
的查找将在/path/to/my/package/
中找到。
对于全局和供应商包,你可以通过将它们定义为数组来提供多个路径(参见上面全局和供应商路径之间的区别 - 都被接受)。
运行更新/安装
这个巧妙的想法是,你不需要改变你的工作流程。如果你现在在你的任何一个包中运行composer install
或composer update
,那些在本地可用的包(在全局composer config.json中描述)将被符号链接到它们原始的位置。你会看到类似的通知。
=> Symlinked phootwork/lang from /path/to/phootwork/lang
陷阱
目前,无论什么情况下,都可以找到并符号链接每个可以在本地找到的包。必须有一些东西来控制这一点,因为有时你只想使用packagist中的特定版本的包。请在问题 #3下提出你的建议。
问题
还有一些尚未解决的问题
- 处理自定义安装程序:你可能有一些自定义安装程序,它们会更改你的包的安装目标。通常,localdev插件将仅将它们包装起来,并且两者都能按预期工作,但是有一个陷阱。这些自定义安装程序(如这个插件这样的composer插件)将在第一次安装所需包时安装。它们在第一次运行时对localdev插件来说是不可见的,所以只有自定义安装程序才会工作。目前,你需要再次运行
composer update
来使它们都工作(参见#1)。 - "忽略丢弃更改":我遇到了这个问题,但我不记得是什么原因导致的。我只是把它留在这里作为提醒,有些事情。如果你遇到这个问题,请创建一个问题。
参考
贡献
欢迎贡献,最佳做法是打开一个新问题或对现有问题添加评论,以开始讨论。