leafo/scssphp-compass
Adds Compass support to scssphp. Provides a helper class that plugs into scssc to extend import paths and register Compass-required functions, letting you @import "compass" and use mixins like box-shadow. Compass SCSS is bundled.
Installation
Add to composer.json:
"require": {
"leafo/scssphp": "^dev-master",
"leafo/scssphp-compass": "^dev-master"
}
Run composer update.
First Compilation
require 'vendor/autoload.php';
$scss = new \scssc();
$compass = new \scss_compass($scss);
$result = $scss->compile('@import "compass"; @include border-radius(5px);');
file_put_contents('output.css', $result);
Key Files to Review
vendor/leafo/scssphp-compass/src/scss_compass.php (core class)vendor/leafo/scssphp-compass/compass/ (pre-extracted Compass SCSS)Preprocessing Pipeline
// Typical Laravel asset compilation (e.g., in a service provider)
public function boot()
{
$scss = new \scssc();
$compass = new \scss_compass($scss);
// Override default import paths if needed
$scss->setImportPaths([base_path('resources/assets/scss'), __DIR__.'/compass']);
// Compile all SCSS files
$files = glob(base_path('resources/assets/scss/*.scss'));
foreach ($files as $file) {
$output = $scss->compile(file_get_contents($file));
file_put_contents(public_path("css/{$file}.css"), $output);
}
}
Dynamic Compilation (e.g., Blade Directives)
// In a Blade directive (e.g., `compileScss`)
Blade::directive('scss', function ($expression) {
$scss = new \scssc();
$compass = new \scss_compass($scss);
return "<?php echo \$scss->compile(?) ?? ''; ?>";
});
// Usage in Blade:
@scss('@import "compass"; @include breakpoint($small) { ... }')
Configuration Management
Store Compass-specific settings in config/scss.php:
return [
'compass' => [
'enabled' => env('SCSS_COMPASS_ENABLED', true),
'custom_functions' => [
'my-custom-mixin' => 'path/to/mixin.scss',
],
],
];
Version Mismatches
leafo/scssphp-compass, run:
php vendor/bin/scssphp-compass-extract
composer.json to avoid surprises:
"leafo/scssphp-compass": "1.0.0"
Import Path Conflicts
compass/utilities/). If your project has overlapping paths:
$scss->setImportPaths([
__DIR__.'/compass', // scssphp-compass path
base_path('resources/assets/scss'), // Custom paths
]);
$scss->getImportPaths() to inspect the resolved paths.Performance Overhead
filemtime checks).Missing Features
scssc->addImportPath() for custom assets.scssphp.Enable Verbose Output
$scss->setErrorFormat(\scssc::ERROR_FORMAT_DETAILED);
$scss->setPrecision(10); // For debugging precision issues
Check for Deprecated Compass Features
@extend) may behave differently in scssphp. Test thoroughly.Fallback for Critical Errors
try {
$result = $scss->compile($source);
} catch (\scss_compass_error $e) {
// Fallback to vanilla SCSS
$scss->removeImportPath(__DIR__.'/compass');
$result = $scss->compile($source);
}
Custom Compass Functions
Add your own mixins/functions by extending scss_compass:
class CustomCompass extends \scss_compass {
public function __construct(\scssc $scss) {
parent::__construct($scss);
$this->addFunction('my-mixin', function($args) {
return $this->scss->compile("@include my-logic($args);");
});
}
}
Override Compass SCSS Replace the bundled Compass files by:
$scss->setImportPaths([__DIR__.'/custom-compass-path']);
scssphp's parser.Integrate with Laravel Eloquent Store compiled CSS in the database:
// In a model observer
$model->observing(function($model) {
if ($model->isDirty('scss_code')) {
$scss = new \scssc();
$compass = new \scss_compass($scss);
$model->css_output = $scss->compile($model->scss_code);
$model->save();
}
});
How can I help you explore Laravel packages today?