## WooCommerce Lib Directory This directory contains a dummy package responsible for managing WooCommerce dependencies that require conflict avoidance. The contents of the `packages` and `classes` directories get automatically generated by `composer install` and `composer update`. This allows us to prefix namespaces and classmap classes to avoid conflicts with plugins that include the same package. All namespaces are prefixed with `Automattic\WooCommerce\Vendor` and classmap classes prefixed with `WC_Vendor_`. **_Do not_ make direct changes in the files contained in `packages` or `classes`! Any changes will be lost!** ### Adding Packages In order to avoid including the original dependencies in the root autoloader we must utilize `require-dev` for them. Composer treats `require` dependencies as transitive while `require-dev` dependencies get ignored by consumers. 1. Add package to `require-dev` section of `composer.json` 2. Add package slug to `extra/mozart/packages` section of `composer.json` 3. Run `composer run-script build-lib` from the root directory (You should now see the package in `packages/VendorName/PackageName` or `classes`) ### Updating Packages Updating a package is as easy as changing the version in `composer.json` and then running `composer run-script build-lib` from the root directory. ### Ignoring Packages If you would like to add a package which does not undergo conflict avoidance you must take steps to ensure it appears in the root autoloader. 1. Add package to the `require` section of both the `lib/composer.json` and root `composer.json` file instead of `require-dev` 2. Add package slug to `extra/mozart/excluded-packages` section of `composer.json` 3. Run `composer run-script build-lib` from the root directory (You **should not** see the package in `packages/VendorName/PackageName` or `classes`)