Yii2:如何通过composer添加JavaScript库?

时间:2015-06-17 10:30:11

标签: javascript npm composer-php yii2

我根据此basic app设置了guide (Installing Yii)。这没问题。根据指南,我还将全局fxp/composer-asset-plugin添加到composer.phar。也没问题。

现在,我已经要求使用托管* q.jsnpm 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文件。

*托管正确的术语?

3 个答案:

答案 0 :(得分:3)

目前在composer.json中要求使用npm或bower包的最简单方法是使用asset-packagist

  1. 删除fxp/composer-asset-plugin

    composer global remove fxp/composer-asset-plugin
    
  2. 将存储库添加到composer.json

    "repositories": [
        {
            "type": "composer",
            "url": "https://asset-packagist.org"
        }
    ]
    
  3. 然后你应该能够在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&amp;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'
    ];
}