PHP Composer - 设置供应商目录

Posted

技术标签:

【中文标题】PHP Composer - 设置供应商目录【英文标题】:PHP Composer - set vendor directory 【发布时间】: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"
        
    

【问题讨论】:

【参考方案1】:

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

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

    "require": 
        "fxp/composer-asset-plugin": "*"
    
    

    在你的额外配置中包含 composer-asset-plugin 指令。在您的 composer.json 文件中:

    "extra": 
    "asset-installer-paths": 
            "npm-asset-library": "../../path/to/vendors/npm",
            "bower-asset-library": "../../path/to/vendors/bower"
        
    
    

    将供应商位置添加到 composer.json 文件中的配置部分:

    "config": 
        "vendor-dir": "../../path/to/vendors"
    
    

    更新 web/index.php 以指向新的供应商位置:

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

    在您的 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', ], ]。这应该可行,但很乏味...... 是的,我可以这样做,它会工作,但我必须手动修改我将使用的每个插件。我已经弄清楚了问题并在下面回答了它。感谢您的帮助。

以上是关于PHP Composer - 设置供应商目录的主要内容,如果未能解决你的问题,请参考以下文章

安装作曲家后我没有供应商文件夹?

使用供应商目录中的 autoloader.php 自动加载无法正常工作

如何将composer的供应商文件夹中的CSS和JS文件复制到公共?

Elastic Beanstalk 中的 PHP Mailer 类无法识别

Lumen Composer 无法检测新创建项目中的供应商文件夹

Composer下载软件包并放入供应商地图,但服务提供商无法识别它,laravel 6