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