作曲家,Laravel和本地包
我的问题是我有一个不是存储库的软件包,我试图让它和Laravel和作曲家一起玩。 它仍然位于vendor文件夹下,唯一的问题是如果我简单地设置:
"psr-0": {
"TestTest": "vendor/test/test/src/"
}
这将加载服务提供商,但是没有一个控制器会自动加载。 实现一个没有自己的仓库的幼体包的正确方法是什么? 或者这是否违背了软件包的性质,这应该简单地在应用程序控制器下进行构造。
这个软件包是我使用工作台创建的,但是我发现我并不是真的需要这个作为一个独立的存储库,但它仍然是一个很好的保存它的包。 因此,该结构与常规包装完全相同:
vendor
testvendor
testpackage
public
src
tests
.gitignore
composer.json
phpunit.xml
更新:
作为我目前使用的解决方案:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"vendor/package"
]
},
作为班级地图中的条目。 展望未来,我可能会将此重构为应用程序文件夹或为此包创建存储库。
如果您有一些您称为“包”的类,则不应将这些文件添加到供应商文件夹中。 此文件夹由作曲家管理,并且您可能随时将其丢失。 在您的应用程序中创建一个子文件夹并将这些文件放在那里。
您必须确保您的PSR-0自动加载适用于文件夹结构中的每个文件。 所以,如果你的根目录是vendor/test/test/src/
并且你的命名空间是
TestTest
你所有的文件都必须在
vendor/test/test/src/Test/Test/ClassFileName.php
PSR-4更容易处理和理解,这一点
"psr-4": {
"TestTest": "vendor/test/test/src/"
}
意味着你的文件必须是这样的:
vendor/test/test/src/ClassFileName.php
重新检查你的命名空间。 在PSR-0中使用名称空间时很容易出错,并记住这一点
composer dump-autoload
每次在composer.json中更改内容或创建新文件时都必须运行。 如果是简单的类自动加载,每次创建文件时,如果是PSR-X自动加载,则每次创建或更新composer.json文件中的命名空间时都如此。
如果你真的是一个软件包,你应该使用Composer:当你的软件包被构造成一个composer软件包(例如,检查Laravel的composer.json),将它添加到你的应用程序的正确方法,如果它不在Packagist列表中,通过repositories
。
您可以在公共VCS存储库中拥有(非包装盒)软件包:
{
"require": {
"monolog/monolog": "dev-bugfix"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/igorw/monolog"
}
]
}
您可以将(非packagist)软件包保存在受密码VCS存储库(git,bitbucket ...)保护的情况下:
{
"require": {
"vendor/my-private-repo": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:vendor/my-private-repo.git"
}
]
}
您可以将软件包压缩到硬盘中,并通过artifact
存储库类型加载它们:
"repositories": [
{
"type": "artifact",
"url": "path/to/directory/with/zips/"
}
],
虽然@Antonio Carlos Ribeiro的回答非常好,但我在本地安装自定义软件包时遇到了问题(这也在他的答案的最后部分说明)
假设这是我们要安装的包的目录结构:
D:/test_pack
src/
composer.json
如果您不想将自定义软件包(最有可能是您自己开发的)上传到在线存储库,则可以使用以下两种方法之一:
方法一
(你必须指定你的软件包的版本,否则你会得到这样的错误:在任何版本中都找不到所需的软件包,软件包名称中可能有拼写错误。)
1)在composer.json中,将版本添加到您的包中。 你的包的json应该看起来像这样:
{
"name": "gandalf/test_pack",//This is your package's name
"description": "some desc",
"version": "1.0.0",//This is the version that you have to specify
"authors": [
{
"name": "gandalf the grey",
"email": "fake@yahoo.com"
}
],
"minimum-stability": "dev",
"require": {
"laravel/framework": "~5.4"
},
"autoload": {
"psr-4": {
"GandalfBotPack": "src/"
}
} }
2)压缩包(假设zip文件位于D:/test_pack/test_packa.zip中)
3)在laravel的composer.json中添加你的包名称(在我们的例子中,gandalf / test_pack需要json的一部分),然后将存储库数组添加到composer.json文件,并在该数组中指定包的zip文件所在的目录在我们的例子中是D:/ test_pack)。 喜欢这个
{
...,
"require": {//adding our package name to laravel's composer.json
...,
"gandalf/test_pack": "*"//package's name
},
...,
"repositories": [
{
"type": "artifact",
"url": "D:/test_pack"
}
]
}
方法II (我最喜欢的方法,你必须使用git init
,然后git add .
和git commit -m "your message"
来初始化你的包目录为git local repository)
1)将包目录初始化为git目录,并将所有更改提交到本地存储库
(假设D:/test_pack
是包含你的包的目录( src/
directory和composer.json
))
转到D:/test_pack
目录并运行这些命令
git init
git add .
git commit -m "your message for this commit"
2)在你的软件包composer.json
文件中添加最小稳定性
{
"name": "gandalf/test_pack",
"description": "some desc",
"authors": [
{
"name": "gandalf the grey",
"email": "fake@yahoo.com"
}
],
"minimum-stability": "dev",//setting minimum-stability
"require": {
//dependencies that your package needs
},
"autoload": {
"psr-4": {
"GandalfBotPack": "src/"
}
}
}
3)在laravel的composer.json文件中需要包的“dev-master”
{
...,
"require": {
...,//some dependencies that laravel needs
"gandalf/test_pack": "dev-master"//requiring dev-master from repository
},
"repositories": [
{
"type": "git",
"url": "D:/test_pack"//path of the local repository directory which contains your package
}
]
}
链接地址: http://www.djcxy.com/p/88637.html