Composer 本地路径加载第三方扩展包

说明

Composer 提供了 Path 加载本地扩展包的方法,允许我们将扩展包以本地目录形式进行加载,方便快速修改,也可以把修改后的代码提交到项目的 VCS 中。

官方提供了 使用 path 加载的文档,可是操作起来不够清晰,此文档将一步步讲解如何操作。

下文将以 InfyOmLabs/laravel-generator 扩展包为例,演示所有的步骤。

1. 将项目本地化

你可以通过任何方式将 laravel-generator 放入你的 packages 目录。 本文将以 git clone 方式完成此操作。

根目录下:

mkdir packages
cd packages
git clone https://github.com/InfyOmLabs/laravel-generator.git

如下图:

file

2. 修改 composer.json 文件

我们可以利用 composer.json 里的 repositories 中的 path 方式创建自定义 package。官方解释见此

下面将 laravel-generator 的下载地址对应到本地的 packages/laravel-generator 目录。

{
    ...

    "repositories": [
        {
            "type": "path", 
            "url": "packages/laravel-generator"
        }
    ]
}

注意只修改 repositories 选项,如图:

file

3. 更新 composer

使用 require 命令来加载扩展包,此命令会自动把 InfyOmLabs/laravel-generator:*@dev 添加到 composer.json 文件中,并且安装依赖和更新 composer.lock 文件。

更多关于 composer require 的信息请见:正确的 Composer 扩展包安装方法

composer require InfyOmLabs/laravel-generator:*@dev

注意:

  • 这里的 *@dev 很重要;
  • 需要在 homestead 里运行

输入如下:

file

如果你新加入一个扩展包,上面的流程已经讲完。

4. 更换扩展包加载方式

如果你一开始是使用除了 path 的其他方式加载的,现在先换为使用 path 加载,你可以使用 remove 命令移除:

composer remove InfyOmLabs/laravel-generator

然后再参照上面的流程重新加载。

工作原理

composer 会创建一个文件夹链接,把 vendor/infyomlabs/laravel-generator 文件夹链接到 packages/laravel-generator 下,如图:

file

--

beers: :beers: :beers: :beers:

摈弃世俗浮躁,追求技术精湛
本帖已被设为精华帖!
Summer
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

请问下你用的是什么IDE

7年前 评论

packages是否放在当前路径的文件夹中?

7年前 评论

我这种方式创建之后,每次更新会把包给删除。@Summer 有什么解决办法没有

7年前 评论
Summer

@iwzh 请使用 homestead

7年前 评论

@Summer 十分感谢,正需要这种

6年前 评论

composer require InfyOmLabs/laravel-generator:@dev 一定要在homestead里面运行是为什么?我在mac本地环境运行直接报错“zsh: no matches found: test/test:@dev”,如果把*去掉,test:test:@dev这就可以了。

5年前 评论

但这种方法好像不能循环的引用包里面的包,比如,这个文档中的InfyOmLabs/laravel-generator包,里面又使用composer依赖了其他的包,这样安装依然会报错

2年前 评论

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