【发布时间】:2021-10-22 09:36:50
【问题描述】:
我的项目是一个 Laravel 实现。我创建了一个 composer.json 文件如下:
{
"name": "company/project",
"description": "My cool project.",
"type": "project",
"license": "proprietary",
"require": {
"laravel/laravel": "8.*"
}
}
我可以把这个文件放在它自己的目录中并运行composer install。这将安装laravel/laravel 的版本8 和vendor/ 目录中的所有依赖项。但这不是一个有效的 Laravel 安装。如果我然后将vendor/laravel/laravel 的内容向上移动到主目录中,将.env.example 复制到.env 并运行composer -o dump-autoload,那么我有一个看起来(据我所知)的目录结构,就像标准 Laravel 安装。
但是,当我尝试通过浏览器访问该站点时,我收到 500 服务器错误,Apache 或 Laravel 日志中没有明显的条目。
我知道这不是 Apache 配置错误,因为我可以使用命令 composer create-project laravel/laravel:8.* {directory} 创建完全相同的站点,并且我得到一个功能基本的 Laravel 站点。
我的最终目标是使用 composer 安装我的项目和 Laravel,以及它的所有依赖项,并获得一个正常运行的站点。我对能够通过composer.lock 文件锁定所有依赖项(包括laravel/laravel 的特定版本)特别感兴趣,该文件随后将包含在我的项目的版本控制源中。
你可能会问为什么我不只使用推荐的命令来创建一个干净的 Laravel 安装并且只对生成的 composer.lock 文件进行版本控制。原因是:该文件不包含laravel/laravel 的特定版本。所以当我在一个干净的目录中使用composer.json/lock文件时,核心laravel/larvel文件丢失了。
关于我做错了什么的任何指针?或者有没有更简单的方法来实现我的目标?
【问题讨论】:
-
运行
composer create-project ...,然后编辑生成的composer.json(手动或通过composer require ...)以根据您的其他需求进行自定义。您永远不应该手动复制/移动目录。 -
laravel/laravel不是项目的依赖项,它是为您提供 shell 设置以使用框架(也称为 laravel 应用程序)的框架项目......框架和其他包是依赖项 -
Alex Howansky 和 lagbox。我的问题是:如果
laravel/laravel的版本未在基本composer.json文件中的任何位置列出,我该如何修复它? -
例如...
bootstrap/目录和artisan命令由laravel/laravel提供。这些随着版本的变化而变化。我需要确保我使用的这些文件的版本与我用于测试我的项目的版本相同。 -
laravel/laravel是骨架项目......这是你用来构建应用程序的东西,当你运行composer create-project laravel/laravel ...时创建的所有东西都是你的项目(因此create-project),有在那之后没有到laravel/laravel的链接(它不是任何东西的依赖项,永远)...composer.json文件将锁定依赖项的版本,例如框架
标签: php laravel composer-php