johnkrovitch / sam
Simple Assets Manager
Installs: 6 546
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 13
Requires
- matthiasmullie/minify: ^1.3 || ^3.0
- symfony/dependency-injection: ^2.8 || ^3.0
- symfony/event-dispatcher: ^2.8 || ^3.0
- symfony/filesystem: ^2.8 || ^3.0
- symfony/finder: ^2.8 || ^3.0
- symfony/options-resolver: ^2.8 || ^3.0
- symfony/process: ^2.8 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^5.4
- scrutinizer/ocular: ~1.1
- dev-master
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1
- dev-dependabot/composer/phpunit/phpunit-tw-6.0or-tw-7.0or-tw-9.0
- dev-dependabot/composer/symfony/process-tw-2.8or-tw-3.0or-tw-4.0or-tw-5.0
- dev-dependabot/composer/symfony/event-dispatcher-tw-2.8or-tw-3.0or-tw-4.0or-tw-5.0
- dev-dependabot/composer/symfony/dependency-injection-tw-2.8or-tw-3.0or-tw-4.0or-tw-5.0
- dev-dependabot/composer/symfony/finder-tw-2.8or-tw-3.0or-tw-4.0or-tw-5.0
- dev-dependabot/composer/symfony/options-resolver-tw-2.8or-tw-3.0or-tw-4.0or-tw-5.0
- dev-dependabot/composer/symfony/filesystem-tw-2.8or-tw-3.0or-tw-4.0or-tw-5.0
- dev-wip
- dev-feature/compass/exception-message
- dev-bugfix/directoy-sources
- dev-dev
This package is auto-updated.
Last update: 2021-05-30 17:36:27 UTC
README
Simple Assets Manager
Version : 0.1.7
Sam is your friend. Sam is like you, he does not like handling complicated assets related stuff.
Sam is a Simple Assets Manager to help assets management in PHP Project. You will be able to easily describe where you want your assets to compiled.
Sam was first develop to be used with the SamBundle, but it can be used stand-alone. Using Sam stand-alone require coding your building tasks. With the SamBundle, you will be able to use a more convenient yml configuration syntax.
Installation
Using composer :
composer require johnkrovitch/sam
Usage
Filters
A filter is a process which transform one or more source files into one or more destination files, using a binary or not. A filter can have options, like the binary path.
Sam a has the following built-in filters for now. More will be added. You can also add your own filter
- Compass filter
The Compass filter will use the Compass binary to transform your ".scss" files into ".css" files.
$configuration = [ 'compass' => [ // put here the compas binary path. By default it will assume // that the binary is loaded in $PATH 'bin' => 'compass' } ];
- Minify filter
The Minify Filter use the matthiasmullie/minify library to minify your css and js files. No options are available for now.
- Merge filter
The Merge filter will merge multiple files into one. It allow you to reduce the number of http requests. No options are available for now.
- Copy filter
The Copy filter will copy one or more files into one or more directory.
Building your filters
In order to use compile your assets, you have to build the filters, using the FilterBuilder. It will check the given configuration and create filters instances according to this configuration.
// enable the filters with default configuration $configuration = [ 'compass' => [], 'merge' => [], 'minify' => [], ]; // an event dispatcher is required. Some events will be dispatched // before the application of each filter $eventDispatcher = new EventDispatcher(); // build tasks using the builder $builder = new FilterBuilder($eventDispatcher); // filters are build, they can be passed to the runner $filters = $builder->build($configuration);
Tasks
A Task will apply one or more filters to a list of source files to a directory or a list of destination files. It describe your assets compilation process.
Building your tasks
$taskConfigurations = [ // main.css is just a name, you can put what ever you want 'main.css' => [ // this filters will be applied in this order to the destination files 'filters' => [ 'compass', 'minify', 'merge', ], // sources file to be compiled 'sources' => [ 'src/MyBundle/Resources/public/css/mycss.css', 'app/Resources/public/css/mycss.css', 'css/mycss.css', 'vendor/a-library/css/lib.css' ], // all assets will be minified and merged to this file 'destinations' => [ 'web/css/main.min.css' ], ], 'main.js' => [ 'filters' => [ 'compass', 'minify', 'merge', ], 'sources' => [ 'css/myjs.js', 'css/mycss.css', 'css/mycss.scss', ], // all assets will be minified and merged to this directory 'destinations' => [ 'web/css' ], ] ]; // build tasks using the builder $builder = new TaskBuilder(); $tasks = $builder->build($taskConfigurations);
Running the tasks
Once your filters are configured and build, once your tasks are create, you should run the task using the TaskRunner. A normalizer should be created to normalize file names for the filters.
// used to normalize file names because multiple pattern could be passed $normalizer = new Normalizer('/path/to/project_root'); // used to locate the file $locator = new Locator($normalizer); // create the runner $runner = new TaskRunner( $filters, $locator, // debug false ); // run your task foreach ($tasks as $task) { $runner->run($task); }
SamBundle
Sam is designed to be used with Symfony and SamBundle integrate the Sam library with Symfony. It will allow your to put your assets configuration into yaml files. It will ease the integration of vendor js/css library (bootstrap, jquery...) using composer.
You no more have to use BootstrapBundle or jQueryBundle. You just have to require them using composer and easily copy, merge, minify those files with your custom assets.
Issues
Feel free to open an issue if you have a problem using this library.
License
The Sam library is release under the MIT License.