【问题标题】:best practice of using VCS in composer projects在作曲家项目中使用 VCS 的最佳实践
【发布时间】:2018-06-09 14:57:24
【问题描述】:

我一直在CakePHP 中编写应用程序,它使用composer 安装来自GitHub 和其他来源的插件和其他存储库。

到目前为止,我使用将所有 vendor/ 文件添加到 Git 存储库,由于项目中安装了大量 composer,这大大增加了存储库的大小。

根据使用VCS 时的最佳实践,vendor/ 目录被添加到.gitignore 文件中,以防止推送到 VCS 存储库。

在我的CakePHP 应用程序中,我需要某种在GitHub 或其他来源上找不到的脚本。所以,我在

中创建了这些脚本文件
vendor/anuj-tbe/

导演。并在composer.json 文件中,使用

标记条目
"autoload": {
    "psr-4": {
        "App\\": "src",
        "AnujTbe\\": "vendor/anuj-tbe",
    }
},

并且还想将脚本文件推送到 VCS,因为以后无法使用 composer 下载它。

1. vendor/ 是放置自定义脚本文件的正确位置吗?
2.除了我自己的目录,我可以忽略供应商文件吗?

【问题讨论】:

  • 为什么把不是通过composer安装的文件放在vendor目录下?这就是 src 等其他文件夹的用途
  • 我放在那里以包含在autoload 中,并在应用程序的其他部分通过namespace 使用。同样CakePHPsrc 目录包含模型、控制器、模板等。如果使用插件,也可能有许多src 目录。
  • 为什么不使用 src 来实现这一点,就像使用 App 命名空间一样?下一次运行composer update 将删除您手动创建的文件夹

标签: git cakephp version-control composer-php


【解决方案1】:

是的,对于你的两个问题。

首先,vendor/ 不应该在 VCS 中被跟踪,您也可以参考 CakePHP 的示例 .gitignore file

其次,您可以将脚本文件放在您喜欢的任何位置,包括vendor/anuj-tbe/ 下。所以你只需要在.gitignore中排除vendor/anuj-tbe

在保留vendor/anuj-tbe/的同时,从VCS中删除vendor/的步骤如下。

# After adding your scripts in vendor/anuj-tbe/
git add .
git commit -m 'add scripts'
touch .gitignore

确保以下内容包含在 .gitignore 中:

vendor/*
!vendor/anuj-tbe

继续执行以下命令:

git rm vendor/* --cached -r
git add .
git commit -m 'remove vendor in VCS except vendor/anuj-tbe'

现在除了vendor/anuj-tbevendor/ 中的所有文件和子文件夹在 VCS 中都会被忽略。

【讨论】:

    【解决方案2】:

    Composer 安装一个composer.lock 文件,它将您的依赖项锁定到安装的最后一个版本。这意味着下次您运行composer install 时,它将重新安装相同的依赖项。好处是,当您切换到另一台计算机并签出项目并运行 composer install 时,您将获得相同的依赖项。

    这意味着您不需要将vendor 文件夹提交给VCS。所以将它添加到您的.gitignore 文件中。

    归档您的构建

    当您构建 Cake 应用程序并将其部署到 Web 服务器时,它将包含 vendor 文件夹。那个版本的 Cake 应用程序将在那里放置很长时间。也许以后你回来时你需要再次处理它,并且可能偶然地一个作曲家依赖消失了(即开源的人死了,现在那个包已经消失了)。因此,您应该将生产构建的存档保存在供应商文件夹中,以便您始终拥有适用于该特定版本的依赖项的副本。

    不要在供应商工作

    您应该始终能够删除您的 vendor 文件夹并运行 composer install 而不会破坏您的 Cake 应用程序。因此,不要在该文件夹中工作或编辑其中的任何内容,因为您所做的更改不会被保留。在某些情况下,您可能希望在其中调试文件,或者尝试使用您正在处理的包,但正如我所说。您应该能够轻松地删除它并重新创建它。

    src 的自定义代码

    如果您想向您的 Cake 应用程序添加更多 PHP 源代码,并且它只会被您的 Cake 应用程序使用。将其放在src 文件夹下。你可以称它为src/Lib/FooBar,它采用命名空间App\Lib\FooBar。无需修改您的composer.json 文件。

    由插件共享

    如果您想拥有一个由您的所有plugins 共享的库。将其放在plugins 文件夹中,并命名为plugins/FooBar。您可以像这样将它添加到作曲家:

    "autoload": {
        "psr-4": {
            "App\\": "src",
            "FooBar\\": "./plugins/FooBar/src",
        }
    },
    

    从技术上讲,它不必是 Cake 插件就可以在该文件夹中。

    共享库

    您可以添加一个名为 lib 的文件夹,其中包含您的不同库,然后将它们添加到 composer.json,如下所示:

    "autoload": {
        "psr-4": {
            "App\\": "src",
            "FooBar\\": "./lib/FooBar",
        }
    },
    

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 2010-11-03
      • 2020-04-19
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      相关资源
      最近更新 更多