为什么 Laravel Spark 安装在项目根目录中,然后符号链接到供应商?

Why is Laravel Spark being installed in project root, then symlinked into vendor?

我注意到 Laravel Spark 正在使用一个(对我来说)奇怪的模式来安装自己,我无法真正弄清楚为什么应该这样做或被认为是好的做法。

行为

鉴于我们在目录 /var/acme-spark.

中创建了一个 Spark 应用程序

首先,Spark 安装程序会设置一个 Laravel 应用程序。之后,它将 downloads/installs 所有 Spark 文件(PHP 源代码、前端资产,如 LESS 和 JS 文件、blade 模板等)放入名为 spark 的目录中项目根目录,即 /var/acme-spark/spark。然后更新 composer.json 以包含以下内容:

{
// ...
    require: {
        // ...
        "laravel/spark": "*@dev"
    }
// ...
    "repositories": [
        {
            "type": "path",
            "url": "./spark"
        }
    ]
}

这基本上意味着:"Take the spark directory and treat it as a vendor repository. Then create a symlink for the spark directory within vendors."

符号链接确实如下所示:

user@machine:~$ cd /var/acme-spark/vendor/laravel
user@machine:/var/acme-spark/vendor/laravel$ ls -l
cashier
framework
homestead
spark -> ../../spark

令人费解的部分

现在这很令人费解,因为它使您可以完全控制 Spark 核心的所有内容,那么为什么还要使用 composer?另一方面,它使更新成为一个问题,因为您可能已经更改了一些内容并希望它们在更新期间不会被覆盖。那么为什么不使用带有私有存储库的简单 composer 包呢?

为什么会这样?这是好习惯吗?它是或不是良好做法的原因是什么?

Spark 不是作曲家包,因为它是一项高级功能,因此您必须在某处添加存储库,这样作曲家才能找到它并像普通作曲家包一样安装。 Spark 自行更新,因此可维护性由 artisan 命令完成。

关于良好做法,您如何构建文件并不重要,最终是否有效,这没有性能问题,并且可以通过不同的方式完成。

综上所述,这是因为您无法直接从 composer 下载 spark。