【发布时间】:2014-11-01 21:48:33
【问题描述】:
我正在使用 Windows 7 并尝试使用 composer 安装 laravel 4.2。我的开发环境是 EasyPHP,但根据我所做的研究,这不是问题。
每次我尝试通过在我的项目目录中运行以下命令来创建一个名为“testapp”的新 laravel 项目时:
composer create-project laravel/laravel testapp --prefer-dist
..,安装成功,直到 composer 尝试生成“自动加载”文件,输出这些行:
Generating autoload files
Could not open input file: artisan
Script php artisan clear-compiled handling the post-install-cmd event returned with an error
[RuntimeException]
Error Output:
如果我随后导航到在我的项目目录中创建的名为 testapp 的新文件夹,然后运行
composer update
或
composer install
最后我得到了同样的错误。
虽然 composer 似乎无法运行任何 php artisan 命令,但通过导航到我的 testapp 文件夹并运行:
php artisan {any command here}
我可以完成任何我想要的工匠命令。 经过一番研究,我发现问题出在作曲家本身。 Composer 不知道如何找到 artisan 文件。 一个建议是我编辑 composer.json 文件,以便 artisan 将由绝对路径而不是相对路径定义。所以我改变了这个:
"scripts": {
"post-install-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-update-cmd": [
"php artisan clear-compiled",
"php artisan optimize"
],
"post-create-project-cmd": [
"php artisan key:generate"
]
},
到这里:
"scripts": {
"post-install-cmd": [
"php C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\testapp\\artisan clear-compiled",
"php C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\testapp\\artisan optimize"
],
"post-update-cmd": [
"php C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\testapp\\artisan clear-compiled",
"php C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\testapp\\artisan optimize"
],
"post-create-project-cmd": [
"php C:\\Program Files (x86)\\EasyPHP-DevServer-14.1VC11\\data\\localweb\\projects\\testapp\\artisan key:generate"
]
},
在我的 testapp 文件夹中的 composer.json 文件中。现在,当运行时
composer install
我在命令提示符下得到了这个输出:
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Warning: The lock file is not up to date with the latest changes in composer.json.
You may be getting outdated dependencies. Run update to update them.
Nothing to install or update
Generating autoload files
Script php C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\proje
cts\testapp\artisan clear-compiled handling the post-install-cmd event returned
with an error
[RuntimeException]
Error Output:
install [--prefer-source] [--prefer-dist] [--dry-run] [--dev] [--no-dev] [--no-p
lugins] [--no-custom-installers] [--no-scripts] [--no-progress] [-v|vv|vvv|--ver
bose] [-o|--optimize-autoloader] [packages1] ... [packagesN]
虽然我最初认为这个输出意味着更改 composer.json 并不能解决问题,但我惊讶地发现当绝对路径不包含空格时更改 composer.json 有效。
例如。我去了 C:\Users\AlexLeung\Desktop,跑了
composer create-project laravel/laravel desktestapp --prefer-dist
得到初始错误,然后更新新desktestapp文件夹中的composer.json看起来像
"scripts": {
"post-install-cmd": [
"php C:\\Users\\AlexLeung\\Desktop\\desktestapp\\artisan clear-compiled",
"php C:\\Users\\AlexLeung\\Desktop\\desktestapp\\artisan optimize"
],
"post-update-cmd": [
"php C:\\Users\\AlexLeung\\Desktop\\desktestapp\\artisan clear-compiled",
"php C:\\Users\\AlexLeung\\Desktop\\desktestapp\\artisan optimize"
],
"post-create-project-cmd": [
"php C:\\Users\\AlexLeung\\Desktop\\desktestapp\\artisan key:generate"
]
},
,并运行
composer install
然后就成功了。虽然这表明如果我将 laravel 安装在没有空格的路径上,我可以安装它,但我需要能够将它安装在“Program Files (x86)”目录下的位置,因为这是 EasyPHP 及其 Apache Web 服务器的位置根,位于。在尝试获取使用空格的绝对路径时,我尝试使用下划线,它最终指向错误的路径,以及 \u0020,它会产生相同的错误。
所以问题仍然存在:
如何让 composer 识别新创建的 testapp 文件夹中的 artisan 文件?
如果第一个问题无法回答,则会出现一组问题:
1. 有没有办法让作曲家在没有我的情况下识别工匠文件需要更改 composer.json 以包含 artisan 的绝对路径?
2. 我是否应该担心生成自动加载文件? (甚至有必要)
3. 如果我在需要运行作曲家更新或安装的任何时候将我的项目移动到桌面(或任何其他没有空格的路径),可以吗?
总的来说,我希望能够完整安装 laravel,并能够在需要时使用方便的 composer 命令。
【问题讨论】:
标签: php json windows-7 laravel-4 composer-php