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 类无法识别