我一直在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。我可以忽略供应商文件,除了我自己的目录吗?
答案 0 :(得分:2)
是的,对于你的两个问题。
首先,不应在VCS中跟踪vendor/
,您也可以将示例.gitignore file引用到CakePHP。
其次,您可以将脚本文件放在任何您喜欢的位置,包括vendor/anuj-tbe/
下。因此,您只需要在endor/anuj-tbe
中排除v .gitignore
。
如下步骤,在保留vendor/
的同时从VCS中删除vendor/anuj-tbe/
。
# 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-tbe
以外,vendor/
中的所有文件和子文件夹都会在VCS中被忽略。
答案 1 :(得分:2)
Composer安装composer.lock
文件,该文件将您的依赖项锁定到已安装的最新版本。这意味着下次运行composer install
时,它将重新安装相同的依赖项。好处是,当您切换到另一台计算机并签出项目并运行composer install
时,您将获得相同的依赖项。
这意味着您无需将vendor
文件夹提交给VCS。因此,请将其添加到.gitignore
文件中。
当您构建Cake应用程序并将其部署到Web服务器时,它将包含vendor
文件夹。那个版本的Cake应用程序将在那里停留很长时间。也许在将来的某个时候,当你回来时,你需要再次研究它,也许是偶然的一个作曲家依赖性消失了(即开源人员死了,现在这个包已经消失了)。因此,您应该使用vendor文件夹保留生产版本的存档,以便始终拥有与该特定版本一起使用的依赖项的副本。
您应始终能够删除vendor
文件夹,并在不破坏Cake应用的情况下运行composer install
。因此,不要在该文件夹内工作或编辑那里的任何内容,因为您不会保留更改。在某些情况下,您可能需要在那里调试文件,或者尝试使用您正在处理的软件包,但正如我所说的那样。您应该能够删除它并轻松地重新创建它。
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",
}
},