Я не уверен, как я могу взломать фильтр assetic less для вывода файла sourcemap. Я имею в виду LessFilter здесь https://github.com/kriswallsmith/assetic/blob/master/src/Assetic/Filter/LessFilter.php
строки 145 и 146 – это то, где создан объект Symfony\Component\Process\Process
$proc = $pb->getProcess(); $code = $proc->run();
Проблема состоит в том, что этот вывод помещается в один файл. Я не уверен, как создать второй файл sourcemap.
Как я могу расширить этот фильтр или взломать Assetic core, чтобы сделать эту работу?
Да, это подходящее место. Однако вам не нужно его взломать. Расширьте его!
Я использую это:
# Using less source maps with Symfony namespace Acme\MyBundle\Assetic; use Assetic\Asset\AssetInterface; class LessFilter extends AsseticLessFilter { public function filterLoad(AssetInterface $asset) { $sourcemapRoot = realpath(dirname($asset->getSourceRoot() . '/' . $asset->getSourcePath())); $this->addTreeOption('sourceMap', true); $this->addTreeOption('sourceMapBasepath', $sourcemapRoot); parent::filterLoad($asset); } } // config.yml assetic: filters: less: class: Acme\MyBundle\Assetic\LessFilter
Я обнаружил, что это отключено здесь: https://github.com/thomaswelton/blog/blob/master/articles/symfony/using-less-source-maps.md
Он расширяет метод filterLoad () фильтра Filters, добавляя два новых параметра дерева. Все доступные параметры дерева можно найти здесь:
https://github.com/less/less.js/blob/master/bin/lessc#L361-L378
Вы должны любить инъекцию зависимости:
Другой способ, с помощью которого я обнаружил, что исходное содержимое меньше, без использования путей, – использовать флаг outputSourceFiles, который объединяет меньше файлов в сгенерированный файл css (добавляет раздувание, поэтому используйте только в dev).
<?php ... class LessFilter extends AsseticLessFilter { public function filterLoad(AssetInterface $asset) { $this->addTreeOption('sourceMap', true); $this->addTreeOption('outputSourceFiles', true); parent::filterLoad($asset); } }