【问题标题】:PHP Composer - set vendor directoryPHP Composer - 设置供应商目录
【发布时间】:2015-06-10 00:41:07
【问题描述】:

我在为 Yii2 应用程序配置供应商路径时遇到问题。我在从 Yii2 基本应用程序模板获得的 composer.json 文件中添加了几行。我要做的就是更改我的供应商资产的位置。

以下是我对文件所做的更改,但出现此错误:

The file or directory to be published does not exist: /path/to/app/vendor/bower/jquery/dist

我希望将特定资产发布到:

/path/to/vendors/bower/jquery/dist

无论我做什么,我仍然会收到该错误消息。我怀疑这是 Yii2 问题而不是作曲家问题,但我不确定。有人有什么想法吗?提前致谢。

文件...

index.php

// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');

require('/path/to/vendors/autoload.php');
require('/path/to/vendors/yiisoft/yii2/Yii.php');

$config = require(__DIR__ . '/../config/web.php');

(new yii\web\Application($config))->run();

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": {
        ...
    },
    "minimum-stability": "dev",
    "config": {
        "process-timeout": 1800,
        "vendor-dir": "/path/to/vendors"
    },
    "require": {
        "fxp/composer-asset-plugin": "~1.0",
        ...
    },
    "extra": {
        "asset-installer-paths": {
            "npm-asset-library": "../../includes/vendors/npm",
            "bower-asset-library": "../../includes/vendors/bower"
        }
    }
}

【问题讨论】:

    标签: php composer-php yii2 bower


    【解决方案1】:

    原来有一个简单的解决方案:如果您想更改供应商资产的位置,则必须遵循以下简单步骤:

    1. 在您的 composer.json 文件中包含 composer-asset-plugin

      "require": {
          "fxp/composer-asset-plugin": "*"
      }
      
    2. 在你的额外配置中包含 composer-asset-plugin 指令。在您的 composer.json 文件中:

      "extra": {
      "asset-installer-paths": {
              "npm-asset-library": "../../path/to/vendors/npm",
              "bower-asset-library": "../../path/to/vendors/bower"
          }
      }
      
    3. 将供应商位置添加到 composer.json 文件中的配置部分:

      "config": {
          "vendor-dir": "../../path/to/vendors"
      }
      
    4. 更新 web/index.php 以指向新的供应商位置:

      require(__DIR__ . '/../../../path/to/vendors/autoload.php');
      require(__DIR__ . '/../../../path/to/vendors/yiisoft/yii2/Yii.php');
      
    5. 在您的 config/web.php 中包含 vendorPath 定义:

      'vendorPath' => '../../../path/to/vendors',
      

    这应该适用于 vanilla Yii2 基本模板。

    【讨论】:

    • 这行不通..而且你提到的路径不成熟。
    • 我有资产插件,但将其升级到最新版本解决了我的问题。
    • 使用 composer v1.10.8 我只需要按照步骤 n.3
    【解决方案2】:

    这对我有用:

    sudo cp -R bower-asset/* bower
    

    只需将所有文件和文件夹从 bower-asset 复制到 bower。

    【讨论】:

      【解决方案3】:

      asset-installer-paths directive 属于 Composer 插件fxp/composer-asset-plugin。 该插件是必需的,该指令才能正常工作。但似乎您在项目存储库或全局中不需要它。

      尝试全局安装:

      composer global require "fxp/composer-asset-plugin:~1.0"
      

      Docu - Installation

      【讨论】:

      • 感谢文档的链接,但我的要求中已经有"fxp/composer-asset-plugin": "~1.0";我试过"fxp/composer-asset-plugin": "*" - 都没有;我得到同样的错误。
      • 好的。您是否尝试过使用默认文件夹默认安装 yii2-app-basic?在您的要求部分中,您定义了"bower-asset/jquery": "2.1.3",包括jQ?
      • 是的。我已经按照 Yii2 Definitive Guide 的说明安装了它,并且按预期工作。我刚刚尝试显式添加"bower-asset/jquery": "2.1.3",但这隐含在我的依赖项中:这似乎没有改变任何东西。运行composer update 并浏览该站点会给我同样的错误。我认为,问题在于 Yii2 在错误的目录中查找资产。 Composer 尚未将其传递给 Yii2。
      • 是的,我也这么认为。 Yii2 必须读取自定义路径并将其用作 AssetManager 中资产的 basePath。这应该自动工作,如果没有,那么它是一个问题或功能请求。也许可以在配置中手动设置路径:'assetManager' => [ 'bundles' => [ 'jquery.min.js' => '/path/to/jquery/dist/jquery.js', ], ]。这应该可行,但很乏味......
      • 是的,我可以这样做,它会工作,但我必须手动修改我将使用的每个插件。我已经弄清楚了问题并在下面回答了它。感谢您的帮助。
      猜你喜欢
      • 2017-01-08
      • 1970-01-01
      • 2014-04-16
      • 2014-06-07
      • 2017-01-11
      • 2017-09-07
      • 2018-10-03
      • 1970-01-01
      • 2015-11-20
      相关资源
      最近更新 更多