interface AssetConverterInterface
{
/**
* Converts a given asset file into a CSS or JS file.
* @param string $asset the asset file path, relative to $basePath
* @param string $basePath the directory the $asset is relative to.
* @return string the converted asset file path, relative to $basePath.
*/
public function convert($asset, $basePath);
}
For example, I use less for my styles. And I need to convert them to css.
Current implementation forces me to copy less sources to assets directory and convert them, after that.
The directory is published based on its timestamp.
So if my less file is changed, directory timestamp is not changed and I need to delete assets or set forceCopy to true in AssetManager in order to see my changes.
In production it is not a problem to delete assets after update. But in development it is not possible to change less file, press "refresh" is the browser and see the results.
I propose to pass one more parameter to this function with AssetBundle object. It will allow to immplement any logic on converter side. In current architecture is is not possible, because convert() is called from AssetBundle, which cannot be overrided for all bundles at once.
15 sec/request is way too long, indeed. Before switched to Grunt I have used the forceCopy => true setting (in the development environment, of course) and it never took noticeable amount of time to publish assets on an absolutely average PC. Maybe your application requires much more asset processing than mine did.
Using an external tool like Grunt (which - as you would expect from a dedicated build tool - is much more configurable/customizable than AssetManager) or an IDE plugin for less compilation and skipping asset publishing by working directly in a web-accessible directory isn’t an option for you? Yii’s asset publishing is more suited for reusable extensions than applications.