I'm having trouble configuring the vendor path for a Yii2 application. I am adding a couple of lines to the composer.json file I get from the Yii2 basic app template. All I want to do is change the location of my vendor assets.
Below are the changes I have made to the files but I get this error:
The file or directory to be published does not exist: /path/to/app/vendor/bower/jquery/dist
But I'm expecting that particular asset to be published to:
/path/to/vendors/bower/jquery/dist
No matter what I do, I still get that error message. I suspect it's a Yii2 issue and not a composer issue but I'm not sure. Anyone got any ideas? Thanks in advance.
// 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();
{
"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"
}
}
}
The vendor is a subfolder in the Laravel root directory. It includes the Composer dependencies in the file autoload. php. Composer is a PHP based tool for dependency management. As a Laravel project works with many libraries, it requires the Composer for dependency management.
Final Verdict Just like the flow chart at the beginning of the post outlines, if you don't have an insane amount of dependencies, just commit those dependencies! You save yourself the headache of worrying about their source repos being deleted or not having network access when you build your project.
Turns out there's a there's a simple solution: If you want to change the location of your vendor assets then you must follow these simple steps:
include the composer-asset-plugin in your composer.json
file
"require": {
"fxp/composer-asset-plugin": "*"
}
include the composer-asset-plugin directive in your extra config. in your composer.json file:
"extra": {
"asset-installer-paths": {
"npm-asset-library": "../../path/to/vendors/npm",
"bower-asset-library": "../../path/to/vendors/bower"
}
}
add the vendor location to the config section in your composer.json file:
"config": {
"vendor-dir": "../../path/to/vendors"
}
update web/index.php to point to the new vendor location:
require(__DIR__ . '/../../../path/to/vendors/autoload.php');
require(__DIR__ . '/../../../path/to/vendors/yiisoft/yii2/Yii.php');
include a vendorPath definition in your config/web.php:
'vendorPath' => '../../../path/to/vendors',
That should work with the vanilla Yii2 basic template.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With