Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Composer - set vendor directory

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.

Files...

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"
        }
    }
}
like image 620
Mr Goobri Avatar asked Apr 05 '15 12:04

Mr Goobri


People also ask

What is vendor folder in PHP?

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.

Should you commit vendor folder?

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.


1 Answers

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:

  1. include the composer-asset-plugin in your composer.json file

    "require": {
        "fxp/composer-asset-plugin": "*"
    }
    
  2. 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"
        }
    }
    
  3. add the vendor location to the config section in your composer.json file:

    "config": {
        "vendor-dir": "../../path/to/vendors"
    }
    
  4. 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');
    
  5. include a vendorPath definition in your config/web.php:

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

That should work with the vanilla Yii2 basic template.

like image 55
Mr Goobri Avatar answered Oct 12 '22 07:10

Mr Goobri