我根据此basic app设置了guide (Installing Yii)。这没问题。根据指南,我还将全局fxp/composer-asset-plugin添加到composer.phar。也没问题。
现在,我已经要求使用托管* q.js的npm package。但我不知道如何通过作曲家添加它。我知道我可以使用CDN代替,也可以手动下载和存储。但我更喜欢使用作曲家。那么我该怎样做才能使这项工作?
我已将此添加到我的composer.json:
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": ">=2.0.4",
"yiisoft/yii2-bootstrap": "*",
"yiisoft/yii2-swiftmailer": "*",
"npm-asset/q": "~1.4" <------
},
并调用composer.phar update
,但得到例外:
Your requirements could not be resolved to an installable set of packages. Problem 1 - The requested package npm-asset/q could not be found in any version, there may be a typo in the package name.
这是一种错误的做法吗?
我想知道如何将JS库添加到项目中。我只知道我必须稍后将其添加到资产中,但目前我还没有能够获得JS文件。
*托管正确的术语?
答案 0 :(得分:3)
目前在composer.json
中要求使用npm或bower包的最简单方法是使用asset-packagist:
删除fxp/composer-asset-plugin
:
composer global remove fxp/composer-asset-plugin
将存储库添加到composer.json
:
"repositories": [
{
"type": "composer",
"url": "https://asset-packagist.org"
}
]
然后你应该能够在npm-asset/
中要求带有bower-asset/
前缀的npm包和带有composer.json
前缀的bower包:
"require": {
"bower-asset/bootstrap": "^3.3",
"npm-asset/jquery": "^2.2"
}
无需全局插件和更快的作曲家更新。
答案 1 :(得分:0)
最佳流程是对您的资产/ AppAsset.php文件进行一些更改。
class AppAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $js = [
'js\your_file_name.js',
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
}
并在你的web目录中创建js文件夹,然后放入你的js文件。
要包含您需要的js文件:
$this->registerJsFile(Yii::$app->request->baseUrl.'/js/your_file_name.js');
答案 2 :(得分:0)
对于作者来说可能有点晚,但我想可能会帮助别人。
<强>作曲强>
除非你的图书馆有一个作曲家设置(在其根目录中包含composer.json,包含packagist.org所需的信息),否则你不能以合适的方式通过作曲家包含它。
然而,包含CDN库很容易,最好使用AssetBudle制作,如下所示:
<?php
namespace frontend\assets;
use yii\web\AssetBundle;
/**
* Main frontend application asset bundle.
*/
class AppAsset extends AssetBundle
{
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'//fonts.googleapis.com/css?family=Open+Sans:400,600&subset=cyrillic,cyrillic-ext',
'//cdn.jsdelivr.net/npm/pretty-checkbox@3.0/dist/pretty-checkbox.min.css'
];
public $js = [
];
public $depends = [
'yii\web\YiiAsset',
];
}
关联供应商JS
链接到通过composer安装的JS库可能看起来很棘手,因为供应商不是可通过Web访问的文件夹,但实际上使用Yii2非常简单。
Yii2 AssetBundle提供sourcePath选项,允许您链接到不可通过Web访问的目录(例如供应商)。
Yii将在@web / assets /文件夹中为您发布包含的文件,并在运行时链接到它。
以下是jquery.cookie的一个工作示例:
<?php
namespace frontend\assets;
use yii\web\AssetBundle;
/**
* Class JqueryCookieAsset
*
* @package frontend\assets
*/
class JqueryCookieAsset extends AssetBundle
{
public $sourcePath = '@vendor/components/jquery-cookie';
public $js = [
'jquery.cookie.js'
];
}