Composer 扩展开发:本地运行扩展包

file

假设你开发了一个网站,并希望将网站的其中一部分分开独立成为一个包。你新建了一个新的仓库并在开发环境中准备好了,这时候你想看看网站和你自己新的包是怎样整合一起使用的,应该怎样去做呢?

本文将介绍如何使用 Composer 将本地的软件包加入到项目中。通过这种方式,你可以运行存储库的本地副本并测试您所做的任何更改。因为本地仓库会实时同步修改的内容,所以不需要中间提交和更新。

路径形式的仓库

首先,composer.json 文件中添加一个类型为 "path" 的仓库。这样,Composer 就能通过制定的路径(不是 Packagist 仓库的形式)找到依赖的资源。

我本地的开发环境是 Laravel Homestead。我的代码 php-cca 保存在 /home/vagrant/Code/php-cca 路径下,这也是 Composer 的工作目录。

"repositories":[
    {
        "type": "path",
        "url": "/home/vagrant/Code/php-cca"
    }
]

当我们下次运行 Composer 时,就会同时从 Packagist 和给定的路径查找依赖的资源。并且路径形式的仓库优先级高于 Packagist。

引入一个开发分支

现在 Composer 知道该怎么加载本地扩展包了,接下来引入一个具体版本。可以使用下面的命令来引入 dev-develop 分支:

composer require barryvanveen/php-cca dev-develop

通过使用上面的命令,可以从 develop 分支下拉取最新版本的代码。同时,也可以很轻松的切换到 dev-master 或者 dev-feature-awesome 分支。

这样,就可以从我们的本地安装最新版本的代码,而不仅是拉取我们提交或标记的版本代码。

Composer 会在控制台输出类似下面的提示:

Package operations: 5 installs, 0 updates, 0 removals
  ...
  - Installing barryvanveen/php-cca (dev-develop): Symlinking from /home/vagrant/Code/php-cca
  ...

现在,可以直接修改本地代码,并且可以在项目中直接测试,不需要提交或执行 composer update。 是不是非常棒!

当符号链接失败时

当我初次尝试上面我提到的步骤时,他没有成功。 我得到以下错误,声明 Composer 无法创建符号链接。

打包操作: 5 安装, 0 更新, 0 移除
  ...
  - Installing barryvanveen/php-cca (dev-develop): Symlinking from /home/vagrant/Code/php-cca
    Symlink failed, fallback to use mirroring!
    Mirroring from /home/vagrant/Code/php-cca

经过一番搜索之后, 这个问题是特定出现在运行虚拟机的 Windows 用户中。 Windows 不允许本地管理员创建符号链接。 幸运的是这个可以通过一个单一的更改来解决。

当你启动虚拟机时,请确保你 以管理员身份 执行操作。 就我而言, 我以管理员身份运行 Git Bash , 然后从这里执行 vagrant up ,  这立即解决了问题。

扩展阅读

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://barryvanveen.nl/blog/44-package-...

译文地址:https://learnku.com/laravel/t/8740/compo...

本帖已被设为精华帖!
本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 1

哥,我测试了下,目前代码在mac系统上写,代码通过IDE工具自动上传到虚拟机centos中(虚拟机centos已用root账户登录来操作)。
我发现更新引用的软件包代码后,需要在centos中执行composer remove……命令后,再重新执行composer require……命令,修改的代码才能生效。
对应你上头的例子就是:修改/home/vagrant/Code/php-cca中的代码后,有自动上传到centos中,但是测试并没有生效,需要在centos中执行composer remove……后,再重新执行composer requir……后才可以生效。
因此,并无法实现“现在,可以直接修改本地代码,并且可以在项目中直接测试,不需要提交或执行 composer update。 是不是非常棒!”这种效果,是我哪里操作错了吗?请指教

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!