Yii2 Composer管理凉亭和凉亭供应商的包装

时间:2016-01-19 09:03:26

标签: yii2 composer-php

我现在已经使用yii2了一段时间,但我无法理解如何管理我的软件包。我在这方面有两个问题。

  1. 当我向yii2添加一个包时,它会被下载到vendor / bower / bower-assets中。

  2. 当yii2发布包时,它会查找vendor / bower下的资产

  3. 我该如何解决这个问题。我为不同的项目安装了许多yii2,我似乎每次都遇到同样的问题。

    这是我的composer.json文件

    {
        "name": "yiisoft/yii2-app-basic",
        "description": "Yii 2 Basic Project Template",
        "keywords": ["yii2", "framework", "basic", "project template"],
        "homepage": "http://www.yiiframework.com/",
        "type": "project",
        "license": "BSD-3-Clause",
        "support": {
            "issues": "https://github.com/yiisoft/yii2/issues?state=open",
            "forum": "http://www.yiiframework.com/forum/",
            "wiki": "http://www.yiiframework.com/wiki/",
            "irc": "irc://irc.freenode.net/yii",
            "source": "https://github.com/yiisoft/yii2"
        },
        "minimum-stability": "stable",
        "require": {
            "php": ">=5.4.0",
            "yiisoft/yii2": ">=2.0.5",
            "yiisoft/yii2-bootstrap": "*",
            "yiisoft/yii2-swiftmailer": "*",
            "dektrium/yii2-user": "0.9.*@dev"
        },
        "require-dev": {
            "yiisoft/yii2-codeception": "*",
            "yiisoft/yii2-debug": "*",
            "yiisoft/yii2-gii": "*",
            "yiisoft/yii2-faker": "*"
        },
        "config": {
            "process-timeout": 1800
        },
        "scripts": {
            "post-create-project-cmd": [
                "yii\\composer\\Installer::postCreateProject"
            ]
        },
        "extra": {
            "yii\\composer\\Installer::postCreateProject": {
                "setPermission": [
                    {
                        "runtime": "0777",
                        "web/assets": "0777",
                        "yii": "0755"
                    }
                ],
                "generateCookieValidationKey": [
                    "config/web.php"
                ]
            },
            "asset-installer-paths": {
                "npm-asset-library": "vendor/npm",
                "bower-asset-library": "vendor/bower"
            }
        }
    }
    

    请参阅下面的AppAsset文件

    class AppAsset extends AssetBundle
    {
        public $basePath = '@webroot';
        public $baseUrl = '@web';
        public $css = [
            'css/site.css',
        ];
        public $js = [
        ];
        public $depends = [
            'yii\web\YiiAsset',
            'yii\bootstrap\BootstrapAsset',
        ];
    }
    

3 个答案:

答案 0 :(得分:1)

这可以通过覆盖bower包的默认别名路径来归档,这些路径是@ vendor / bower到@ vendor / bower / bower-asset。

这可以从$ config = []

下的web.php文件中完成
 'aliases' => [
        '@bower' => '@vendor/bower/bower-asset',
    ],

当你回音

echo Yii::getAlias('@bower');

它应该回应

/Library/WebServer/Documents/project-name/vendor/bower/bower-asset

答案 1 :(得分:1)

我刚才面对这个问题,它让我抓狂!

解决方案实际上非常简单(不是总是吗?) - 您需要删除Composer公共目录中的 fxp 目录并清除编写器缓存 - composer global clearcache - 和从全局composer.json中删除fxp插件行并重新要求它。

无论我做了什么,凉亭套餐都安装在 vendor / bower / bower-asset 或其他奇怪的地方。

帮助我的解决方案是摆脱fxp插件并重新要求它。 试试吧。

Composer资产插件很有用,但非常有用。

希望这有帮助! :)

编辑: 您面临的问题仅仅是Composer资产插件拒绝解析在composer.json文件中明确定义的资产安装路径。 在我自己的项目中测试了行为之后,我创建了一个'vanilla'基本应用程序,甚至是一个高级应用程序:相同的行为。 所以,我重新要求/重新安装了资产插件并修复了它。

答案 2 :(得分:0)

这是我们注册战利品资产的方式。

namespace backend\assets;


use yii\web\AssetBundle;

class BootstrapAsset extends AssetBundle
{
    public $sourcePath = '@bower/bootstrap/dist';
    public $js         = [
        'js/bootstrap.min.js',
    ];
}

并在您的布局中注册此资产:

$asset     = AppAsset::register($this);
$bootstrap = \backend\assets\BootstrapAsset::register($this);

希望这会给出一个暗示。