Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Composer Namespace Collisions in WordPress Plugin Development

I'm encountering a wholly predictable yet incredibly annoying and tough to resolve problem.

I've been working on a PHP framework for developing WordPress plugins. It's using Composer for dependency management. Of course, the problem is if you have two instances of my framework in the same installation of WordPress, you have two vendor folders, and two copies of any packages required by the framework. Which leads to an error.

The framework functions as a separate plugin which is then inherited by any apps/plugins that are build on it.

Move the vendor folder to the core framework folder?

Problems: I don't know what would happen if I have two composer.json files and two composer.phar files writing to the same vendor folder and using the same autoloader. Presumably it wouldn't be good. Besides that, it doesn't solve the problem of collisions with composer packages that could be used by any other script or plugin outside of what I'm trying to handle.

So I'm stuck. Is this a problem that can be solved, or is it just inherent in PHP?

like image 882
jdp Avatar asked Aug 05 '13 14:08

jdp


1 Answers

Composer is not really meant to be used multiple times in same project. On other hand there is nothing terribly wrong with it either, however you lose its dependencies features and need to treat this like generic case of dependencies in WordPress environment.

In other words - if you are not doing dependencies Composer way and WordPress is not doing dependencies at all, it becomes your personal problem how to deal with it.

I don't know what would happen if I have two composer.json files and two composer.phar files writing to the same vendor folder and using the same autoloader

I am not following why the vendor folder would be same if you are using multiple composer installs... Could you elaborate on how you structure it and is it meant for public or private use?

like image 92
Rarst Avatar answered Oct 05 '22 22:10

Rarst