我在一个虚拟机中运行一个开发环境,该虚拟机利用我主机上的共享目录。由于一些原因,我已经将我的几个包移出了项目供应商目录,并将它们放在操作系统的根目录下。这是因为当我有多个项目使用相同的依赖关系运行时,我可以更新依赖关系中的源代码,而不必每次都提交和运行composer更新。
在我的composer.json中,我的一个项目有以下内容...
"autoload": {
"psr-0": {
"Product\\Common\\": "/srv/deps/php-common/src/"
}
}如您所见,我正在尝试从/srv/deps/php-common/src/加载项目的源代码。在apache中可以很好地访问这个目录,我也尝试过手动包含其中的一个文件(这也很好用)。然而,Composer拒绝在那里选取任何类。
尝试实例化Product\Common\Sample将导致PHP报告该类不存在。
我是不是做错了什么?
发布于 2013-10-31 21:47:03
,我是不是做错了什么?
你可能自己猜到了,答案是“是”。
Composer的关键功能是在您需要的版本中添加库,包括下载,在您不需要注意的位置(除了必须将这些文件复制到生产机器上)。
如果您维护一个库的中心位置,如何确保它们位于您的应用程序所需的正确版本中?
此外,如果您添加了具有绝对路径的自动加载,则该应用程序现在依赖于该确切的目录结构,该目录结构必须复制到它应该安装的任何位置。虽然我确实理解,对于开发时间来说,只需要关心一个中心副本看起来要方便得多,但对于生产,或者让新的开发人员准备好在该项目上工作,这并不是很方便。
您是否考虑过通过使用Phing或Ant脚本获得一些帮助以提高开发的便利性?我爱他们。我用Git签出了一个分支,然后在主目录中运行phing test来启动测试套件。第一步是运行composer install,它会获取正确的版本。
或者,我可以只运行phing composer来安装,但通常我对运行测试感兴趣。我切换到一个分支,更改一些代码并运行测试。我不能忘记安装正确的库版本,这是自动完成的。
或者我想更新到最新的版本。这是一个手动步骤,也需要在之后运行测试,但是一旦成功,composer.json和composer.lock中的新依赖项就会提交,并将复制到其他任何地方。
对此真正有帮助的一件事是在Github或Bitbucket上托管库,能够下载ZIP文件而不是克隆存储库-或者运行Satis的本地实例来生成这些ZIP文件。这使得安装版本变得非常快。
但是为了回答你关于自动加载的问题:看看vendor/composer中生成的文件。他们看起来应该工作吗?机器能看到里面的路径和文件吗?
https://stackoverflow.com/questions/19703608
复制相似问题