今天想要试试yii2.0,安装使用的composer
composer global require "fxp/composer-asset-plugin:~1.0.0"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
通过以上安装,成功完成了yii2.0的安装,但是在运行
http://localhost/basic/web/index.php
后,报了以下错误:
The file or directory to be published does not exist: D:\xampp\htdocs\basic\vendor\bower/jquery/dist
通过查看文档,我发现在vendor\bowerjquery\dist目录中确实不存在dist,正确目录是:vendor/bower/bower-asset\jquery\dist
但是不知道在哪里进行相应配置。
初学者,请大家给予知道一下
其实并不是什么大问题。把composer
升到1.1.1就行了。。。
要被yiichina
给坑了,英文版的文档可以正常运行。中文版的没同步更新文档。。。
http://www.yiiframework.com/doc-2.0/guide-start-installation.html#installing-via-composer
其实之前composer安装的也是和你下载的一样,安装在vendor/bower/
下,不知道为啥,这次用composer
会多出这一级目录
=================
2015年11月30日 补充:
不建议按照 @ThemisMin 的方法修改源码,官方给的解决办法是降级composer
composer self-update 1.0.0-alpha11
composer clear-cache
重新执行composer
创建YII2
安装:
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer create-project --prefer-dist yiisoft/yii2-app-basic basic
不需要怎么麻烦,只要对定义 @bower的地方做下修改就好了。
vim htdoc/vendor/yiisoft/yii2/base/Application.php
:456行
// 注释掉
// Yii::setAlias('@bower', $this->_vendorPath . DIRECTORY_SEPARATOR . 'bower');
// 替换成
Yii::setAlias('@bower', $this->_vendorPath . DIRECTORY_SEPARATOR . 'bower' . DIRECTORY_SEPARATOR . 'bower-asset');
升级composer到最新版
composer self-update
在升级升级composer-asset-plugin到1.1.1
composer global require "fxp/composer-asset-plugin:~1.1.1"
在重新composer install
自己解决了,这个问题。现在把答案在这里说一下,
通过对比composer的项目,与直接下载的项目(可直接运行)。主要区别是在 vendor/bower
这个目录
composer安装的项目该目录结构:
直接下载的项目该目录结构:
对比发现composer安装的项目,多了一级 bower-asset 目录,所以在运行:http://localhost/basic/web/index.php
时,报错说相关的jquery与bootstap文件找不到。
分析到这里,很明白就是代码相应资源的路径有问题,所以只要解决相应的资源路径即可。
yii2.0.6中管理jquery资源的类是:yii\web\JqueryAsset
代码如下:
class JqueryAsset extends AssetBundle
{
public $sourcePath = '@bower/jquery/dist';
public $js = [
'jquery.js',
];
}
将其$sourcePath更改为:@bower/bower-asset/jquery/dist
即可。
然后修改bootstrap相关路径,非常类似,需要修改的三个类,分别是:
yii\bootstrap\BootstrapAsset
yii\bootstrap\BootstrapPluginAsset
yii\bootstrap\BootstrapThemeAsset
注意:上面所有的类都是命名空间,而不是实际路径,至于实际路径,可参考对应的自动加载文件找到。