我正在创建我的第一个作曲家包。我将它拉入香草Laravel项目进行测试。
我遇到的问题是,当我在主要的Laravel composer.json文件中需要我的编写器包时,然后尝试更新自动加载。
{
"name": "cschmitz/l5-simplefm",
"description": "A Laravel 5 wrapper for Soliant Consulting's SimpleFM package.",
"require": {
"soliantconsulting/simplefm": "3.0.*"
},
"license": "MIT",
"authors": [
{
"name": "cschmitz",
"email": "schmitz.chris@gmail.com"
}
],
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"L5SimpleFM\\": "src/"
}
}
}
vendor
文件夹中的包文件夹结构:{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"type": "project",
"require": {
"php": ">=5.5.9",
"laravel/framework": "5.1.*",
"cschmitz/l5-simplefm": "dev" // Requiring my package here
},
...
在此之后,我执行了composer dump-autoload
。我没有从作曲家那里得到任何错误,但是当我查看我的vendor/composer/autoload_psr4.php
文件时,我的命名空间没有在数组中列出:
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
...
'App\\' => array($baseDir . '/app'),
// I expected to see `'L5SimpleFM\\' => array($vendorDir . '/cschmitz/L5SimpleFM/src')` as the last key of this array, but nothing shows past the App key
);
我在网上查看了stackoverflow,但我发现的各种答案和建议并没有解决问题。
任何人都能看到我失踪的东西吗?
根据Alexandru Guzinschi的回答,我尝试告诉我的Laravel项目,通过在Laravel项目的composer.json文件中添加以下块来检查本地作曲家存储库:
"repositories":[
{
"type": "vcs",
"url": "../cschmitz/L5SimpleFM"
}
],
然后我将从cschmitz
目录开始的包文件夹移动到我的laravel项目的同一级别。文件结构现在看起来像这样:
LaravelProjectFolder/
composer.json
cschmitz/
L5SimpleFM/
composer.json
最初我遇到了错误"没有发现驱动程序来处理VCS存储库vendor / cschmitz"。在阅读了一下后,我发现能够使用这种本地存储库,repo本身需要受版本控制(即git,svn等)。说得通。我还没有将它置于版本控制之下,因为这只是一个用于尝试开发软件包的测试项目。
我在Laravel项目的根目录下创建了一个git存储库并运行composer update
。现在我收到了错误:
[作曲\库\ InvalidRepositoryException] 在../cschmitz/L5SimpleFM的任何分支或标记中找不到有效的composer.json,无法从中加载包。
这令人困惑,因为我可以ls ../cschmitz/L5SimpleFM/composer.json
并查看该文件。我也可以运行git ls-tree -r master --name-only
并在本地存储库版本控件中查看composer.json文件:
是否存在阻止我的Laravel项目查看本地存储库的composer.json文件的内容?
答案 0 :(得分:0)
仅在vendor
目录中移动您的库是不够的,因为Composer不会扫描该目录,也不知道您的更改。
您需要通过将其发布到Packagist或通过从本地文件系统加载来告诉Composer您的包。在Laravel项目composer.json文件中,更改:
"repositories": [
{
"type": "vcs",
"url": "/path/to/cschmitz"
}
],
"require": {
"cschmitz/l5-simplefm": "dev-develop"
}
接下来,您需要运行composer update
才能安装库。
与您当前的问题无关,但很快就会出现问题:
在您执行此操作后,您将继续使用cschmitz/l5-simplefm
库,您将注意到您需要提交对库的更改,然后再在Laravel项目中再次运行composer update
你可以使用这些变化。关于如何规避这个问题,你有一些解决方案here。