确认:首先,这是我的第一篇求助文章,因为我看了很多关于stackoverflow和其他资源的文章,但就是找不到解决方案。
问题听起来很熟悉,但我就是想不出来,也许是因为我坚持了2天。另一个注意,这是我的第一个包,所以是的,我不是100%确定我在做什么。
结构:
- laravel-project
- ...
- packages
- my-custom-package
- src
- MyCustomPackageServiceProvider.php
- composer.json
- public
- resources
- routes
- ...
- composer.json
因此,它是基本的Laravel 5.8 +内部添加的包文件夹,用于本地包开发(它已被移动到仓库以及)
现行规范(简化为其实际工作项目):
**文件:**laravel-project/packages/my-custom-package/composer.json
{
"name": "company/my-custom-package",
"type": "library",
"require": {
"php": ">=7.2",
},
"require-dev": {
"ext-curl": "*"
},
"authors": [
{
"name": "John Smith",
"email": "jsmith@test.tv"
}
],
"autoload" : {
"prs-4": {
"Company\\MyCustomPackage\\": "src/"
}
},
"minimum-stability": "dev"
}
**文件:**laravel-project/packages/my-custom-package/src/MyCustomPackageServiceProvider.php
<?php
namespace Company\MyCustomPackage;
use Illuminate\Support\ServiceProvider;
class MyCustomPackageServiceProvider extends ServiceProvider {
public function boot()
{
$this->loadRoutesFrom(__DIR__ . '/routes/web.php');
$this->loadMigrationsFrom(__DIR__ . '/database/migrations');
}
public function register()
{
}
}
**文件:**laravel-project/composer.json
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",
"repositories": [
{
"type": "path",
"url": "~/testlaravel/packages/my-custom-package",
"options": {
"symlink": true
}
}
],
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0",
"guzzlehttp/guzzle": "^6.3.3",
"company/my-custom-package": "dev-master"
},
"require-dev": {
"beyondcode/laravel-dump-server": "^1.0",
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^3.0",
"phpunit/phpunit": "^7.5"
},
"config": {
"optimize-autoloader": true,
"preferred-install": "dist",
"sort-packages": true
},
"extra": {
"laravel": {
"dont-discover": []
}
},
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
"autoload-dev": {
"prs-4": {
"Company\\MyCustomPackage\\": "~/testlaravel/packages/my-custom-package/src"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
}
}
解释:~/testlaravel/是Vagrant机器中的文件夹路径,项目的原始URL是“packages/my-custom-package”,但我为这个扩展版本做了更改,只是为了让它工作。
**文件:**config/app.php(新增服务商)
Company\MyCustomPackage\MyCustomPackageServiceProvider::class
问题:首先,我做了这个东西localy和它的工作,我是从以下快速安装说明“* 创建Laravel Composer软件包从头上传到packagist*”作者:Bitfumes,和包工作,我可以运行 composer 更新,然后我添加到app.php我的包,我可以运行自定义路由,这一切都工作.之后我把包移到了git repo中,并以同样的方式要求它,只是把“repositories”字段改为
"repositories": [
{
"type": "vcs",
"url": "git@git.fulllink.co:john/my-custom-package.git"
}
]
当你运行composer update时,你可以看到在vendor/ files里面有一个包含包的Company文件夹,但是如果你离开config/app.php服务提供程序,它会开始抱怨有*Class 'Company\MyCustomPackage\MyCustomPackageServiceProvider' not fo und*
经过一些f***左右,我发现是的,我的autoload_classmap(不记得原来的帖子)不包含我的包,所以今天我决定再试一次本地,看看区别,它是否被添加到Map文件,现在我得到同样的错误时,需要本地包,我不能让它工作了。
我一直在删除供应商文件夹和锁定文件, composer 转储自动加载,但这没有帮助。我只是在想还有什么东西被超级缓存了吗?
**!!更新!!”””我甚至没有更多的困惑。在composer.json中(我现在在实际的项目仓库上测试了项目一,其中需要另外2个本地git仓库)。所以我现在在vendor/Company/{4 packages}中有4个包,我比较了所有4个包composer.json,我找不到任何主要差异,但除了我的,所有这些包都已加载到自动加载Map。我能看到的唯一主要区别是,这两个软件包不使用ServiceProvider.php文件,但我看不出这会如何影响或改变事情。
1条答案
按热度按时间42fyovps1#
你做了90%的正确工作,所以这里有一个简洁的答案,任何人谁是面临这个问题,我刚刚测试了这个与Laravel 8.8,但我相信它将工作与Laravel v10以及。
️1第一步
在Laravel项目的root
composer.json
中有以下2个更改。1.需要像这样的自定义库:
"company/my-custom-package": "dev-main"
如果你使用的是传统的默认git分支命名,那么使用dev-master
1.将存储库添加到同一文件的末尾,如下所示:
其中
packages
是位于根目录composer.json
旁边的目录。️2第二步
现在,在您的自定义包中,假设
packages/my-custom-package/composer.json
确保具有这两个明显的配置。1.自动加载,达!SP所在的目录
1.现在是“extras”,这样我们就可以让Laravel自动发现我们的软件包了,对吧?