PHP Composer -设置供应商目录

pu3pd22g  于 2023-06-28  发布在  PHP
关注(0)|答案(4)|浏览(135)

我在配置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的问题,而不是 composer 的问题,但我不确定。有人有什么主意吗?先谢谢你了。

文件...

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"
        }
    }
}
dkqlctbz

dkqlctbz1#

其实有一个很简单的解决办法:如果要更改供应商资产的位置,则必须执行以下简单步骤:
1.在composer.json文件中包含composer-asset-plugin

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

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

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

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

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

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

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

1.在config/web.php中包含vendorPath定义:

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

这应该与vanilla Yii 2基本模板一起工作。

0ejtzxu1

0ejtzxu12#

这对我很有效:

sudo cp -R bower-asset/* bower

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

noj0wjuj

noj0wjuj3#

asset-installer-paths指令属于Composer插件fxp/composer-asset-plugin。该插件是必需的,此指令的工作.但是看起来你并没有在你的项目仓库或全局中要求它。
尝试全局安装:

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

Docu -安装

ogq8wdun

ogq8wdun4#

这个问题来了,因为旧的资产插件安装文件在vendor/bowervendor/npm,但由于 composer 不再需要这个插件,并安装在vendor/bower-assetsvendor/npm-assets下面。
在配置中只需要以下几行

'aliases' => [
        '@bower' => '@vendor/bower-asset',
        '@npm'   => '@vendor/npm-asset',
    ],

这改变了您的资产查找@bower和@npm目录的位置。在此更改之后,您可以完全从require块中删除composer-asset-plugin,并从extras块中删除asset-installer-paths

**额外奖励:**如果您想移动整个供应商目录,可以添加

'vendorPath' => dirname(dirname(__DIR__)) . '/includes/vendor'`

修改vendor-path到任何你喜欢的地方。请记住将composer.json也移动到此目录,或者考虑在composer配置中更改vendor-dir

相关问题