Composer工作流程是怎样的?

4
顺便说一下,我睡眠不足,现在似乎被心理阻塞了,这可能会让你觉得这些话毫无意义,如果它们看起来不那么合理,请耐心接受。
我正在使用OS X Snow Leopard。我不会撒谎,我喜欢使用PEAR为我设置的二进制文件。我只需在安装了PEAR软件包后运行“brew unlink php53”和“brew link php53”,就可以在“/usr/local/bin”中获取它们的二进制文件。
以Behat为例。如果我通过PEAR(现已过时)安装它,我会按照上述程序操作,然后立即通过“behat”获得对它的访问权限,仅此而已。如果我要链接Composer生成的整个“bin”文件夹,除了“behat”之外,我还会得到三个“命令”:“behat.bat”和“release”。
我做错了什么吗?难道没有一种方法可以集中正确的二进制文件,例如在“/usr/local/bin”上,最好不必添加新路径到“$PATH”中吗?有没有一种通过Composer完成它的方法?
我在考虑npm,它可以设置模块的全局和本地版本。我想要舒适的全局版本(正确的)二进制文件。有点像gemsets,但不会不必要地复制东西。
你看到了吗?这是很多混合信息,但这就是我现在头脑的感觉。我想我正在寻找类似于this other question的东西,只是应用于“供应商”二进制文件。
提前致谢!
PS:如果我真的听起来像一个可怜的人,请让我知道,我会在好好睡一觉后第一时间重新表达我的信息。谢谢!
1个回答

6
事实是,如果您全局安装东西,那么当一个项目需要 Behat 1.5 而另一个需要不兼容的 Behat 2.0(虚构版本)时会发生什么?在项目内部使用 require-dev 安装这些工具是解决此问题的好方法。然后您只需在项目中调用 bin/behat,就完成了这个步骤(假设您在 composer 配置文件中放置了 bin-dir: bin,否则它将是 vendor/bin/behat)。
关于 behat.bat 和 release,这不会发生。这些文件存在于 behat 中,但它们不会链接到 composer 的 bin 目录中。
最后,如果您真的想要全局安装,可以有 ~/phputils/composer.json 或其他类似配置:
{
     "require": {
         "behat/behat": "*"
     },
     "config": {
         "bin-dir": "/usr/local/bin"
     }
}

我不确定绝对的bin-dir目录在现阶段是否有效,尤其不确定这是否是个好主意,但这是一种选择。最好的方式是将它放置在"bin"目录中,并将~/phputils/bin添加到你的PATH环境变量中。然后你可以进入该目录,运行composer install/update就行了。
还有一个技巧是在你的/usr/local/bin目录中创建一个composer-g shell脚本,以便执行cd ~/phputils/ && composer $*,这样你就可以从任何地方调用composer-g update behat/behat

RubyGems在全局范围内处理这两个版本。我会按项目选择它们。Bundle会确保每个项目中都有正确的二进制文件作为安全措施,但我仍然可以使用全局的版本。我提到bin目录中的两个额外文件是因为我通过Packagist安装了behat,它们确实位于那个文件夹内。我现在想要的是以每个项目为单位“使用”这些包,但只进行一次全局安装。我曾思考过你的解决方案,只是不想自己去做。我将支持Composer,让它随着更多功能的成熟而发展。谢谢 - Andrés Botero
你所描述的很有趣,我们可以在某个时候做到这一点。有一个链接命令已经或多或少地计划好了(https://github.com/composer/composer/issues/601),这应该也有助于解决这种情况。无论如何,请随时查看开放问题并在此处发表评论。我们始终欢迎那些广泛使用其他工具的人提供意见。 - Seldaek
我之前没有注意到/检查你是Composer核心开发者之一,哈哈。无论如何,感谢你的支持! - Andrés Botero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接