cancel
Showing results for 
Search instead for 
Did you mean: 

How to integrate third party php library css, js and other static files in Magento 2?

How to integrate third party php library css, js and other static files in Magento 2?

There is the library which has some css, js assets. I want to include this library and use it's assets in Magento 2. I am prepared to write a module for this, but I don't know where to start.

 

I first went with the approach of copying the files to lib/web directory, but when it went to magento-cloud the code collapsed as we do not have write access to that folder. Then I stumbled upon the file 'vendor/magento/module-deploy/Source/Lib.php' and tried to recreate it. I was not able to place the files in the static directory and I got the error of 'Unable to resolve the source file'.

 

My code in the di.xml

 

    <type name="Magento\Deploy\Source\SourcePool">
        <arguments>
            <argument name="sources" xsi:type="array">
                <item name="customassets" xsi:type="object">*\*\Source\Assets</item>
            </argument>
        </arguments>
    </type>

Assets.php file

<?php

namespace *\*\Source;

use Magento\Deploy\Package\Package;
use Magento\Deploy\Package\PackageFileFactory;
use Magento\Deploy\Source\SourceInterface;
use Magento\Framework\App\Utility\Files;

class Assets implements SourceInterface
{
    const TYPE = 'customassets';
    /**
     * @var Files
     */
    private $filesUtil;
    /**
     * @var PackageFileFactory
     */
    private $packageFileFactory;

    public function __construct(
        Files $filesUtil,
        PackageFileFactory $packageFileFactory
    ) {
        $this->filesUtil          = $filesUtil;
        $this->packageFileFactory = $packageFileFactory;
    }

    public function get(): array
    {
        $files              = [];
        $pattern            = BP . "/vendor/*/*/src/*/*/assets";
        foreach (Files::getFiles([$pattern], '*') as $file) {
            $path          = str_replace(DIRECTORY_SEPARATOR, '/', BP);
            $fileName      = $this->_parseAssets($file, $path);
            $params             = [
                'area'       => Package::BASE_AREA,
                'theme'      => null,
                'locale'     => null,
                'module'     => null,
                'fileName'   => $fileName,
                'sourcePath' => $file
            ];
            $files[]        = $this->packageFileFactory->create($params);
        }


        return $files;
    }

    /**
     * Parse file path from the absolute path of static library
     *
     * @param string $file
     * @param string $path
     *
     * @return string
     */
    protected function _parseAssets(string $file, string $path): string
    {
        preg_match(
            '/^' . preg_quote("{$path}/vendor/*/*/src/*/*/", '/') . '(.+)$/i', $file,
            $matches);

        return 'custom/assets/' . $matches[1];
    }
}