Stylus plugin for gulp
npx @tessl/cli install tessl/npm-gulp-stylus@3.0.0Gulp Stylus is a Gulp plugin that compiles Stylus CSS preprocessor files (.styl) into CSS (.css) using the Accord library wrapper around the Stylus engine. It provides comprehensive support for sourcemaps, compression, variable definition, and all standard Stylus compilation options within Gulp streaming build workflows.
npm install --save-dev gulp-stylusconst stylus = require('gulp-stylus');For accessing the underlying Stylus engine:
const gulpStylus = require('gulp-stylus');
const originalStylus = gulpStylus.stylus;const gulp = require('gulp');
const stylus = require('gulp-stylus');
// Basic Stylus compilation
gulp.task('stylus', function () {
return gulp.src('./src/**/*.styl')
.pipe(stylus())
.pipe(gulp.dest('./dist/css'));
});
// With options
gulp.task('stylus-compressed', function () {
return gulp.src('./src/**/*.styl')
.pipe(stylus({
compress: true,
linenos: true
}))
.pipe(gulp.dest('./dist/css'));
});Gulp Stylus is built around several key components:
Main plugin function that creates a Gulp transform stream for compiling Stylus files to CSS.
/**
* Creates a Gulp transform stream for Stylus compilation
* @param {Object} options - Compilation options passed to Accord/Stylus
* @returns {Transform} through2 transform stream
*/
function gulpStylus(options);Parameters:
options (Object, optional): Compilation options object supporting all Stylus optionsSupported Options:
interface StylusOptions {
/** Enable output compression */
compress?: boolean;
/** Include line numbers in output */
linenos?: boolean;
/** Enable sourcemap generation or provide sourcemap options */
sourcemap?: boolean | {
/** Base path for sourcemap generation */
basePath?: string;
};
/** Define variables accessible in Stylus files */
define?: Object;
/** Pass raw objects to Stylus */
rawDefine?: Object;
/** Import additional Stylus files */
import?: string | string[];
/** Enable CSS inclusion */
'include css'?: boolean;
/** Override filename (automatically set from file.path) */
filename?: string;
// All other standard Stylus/Accord options are supported
}Returns:
Stream Behavior:
Usage Examples:
// Basic compilation
gulp.src('**/*.styl')
.pipe(stylus())
.pipe(gulp.dest('dist'));
// With compression and line numbers
gulp.src('**/*.styl')
.pipe(stylus({
compress: true,
linenos: true
}))
.pipe(gulp.dest('dist'));
// With variable definitions
gulp.src('**/*.styl')
.pipe(stylus({
define: {
primaryColor: '#ff0000',
debug: true
}
}))
.pipe(gulp.dest('dist'));
// With imports
gulp.src('**/*.styl')
.pipe(stylus({
import: ['./src/mixins.styl', './src/variables.styl']
}))
.pipe(gulp.dest('dist'));
// With gulp-data integration
const data = require('gulp-data');
gulp.src('**/*.styl')
.pipe(data(function(file) {
return {
componentPath: '/' + file.relative.replace(/\/[^\/]*$/, '')
};
}))
.pipe(stylus()) // Automatically uses file.data for variables
.pipe(gulp.dest('dist'));// Native Stylus sourcemaps
gulp.src('**/*.styl')
.pipe(stylus({
sourcemap: true
}))
.pipe(gulp.dest('dist'));
// With custom sourcemap options
gulp.src('**/*.styl')
.pipe(stylus({
sourcemap: {
basePath: './src'
}
}))
.pipe(gulp.dest('dist'));
// External sourcemaps with gulp-sourcemaps
const sourcemaps = require('gulp-sourcemaps');
gulp.src('**/*.styl')
.pipe(sourcemaps.init())
.pipe(stylus())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist'));Direct access to the underlying Stylus module for advanced usage scenarios.
/**
* Direct access to the underlying Stylus module
* @type {Object} The Stylus module
*/
gulpStylus.stylus;Usage Example:
const gulpStylus = require('gulp-stylus');
const stylus = gulpStylus.stylus;
// Use original Stylus directly for advanced configuration
const stylusRenderer = stylus('./input.styl')
.set('filename', './input.styl')
.define('url', stylus.url());The plugin provides comprehensive error handling for common scenarios:
gulp.src('**/*.styl')
.pipe(stylus())
.on('error', function(err) {
console.error('Stylus compilation error:', err.message);
// Handle error appropriately
})
.pipe(gulp.dest('dist'));Automatically consumes data attached to Vinyl files for variable definition:
const data = require('gulp-data');
gulp.src('components/**/*.styl')
.pipe(data(function(file) {
return {
componentPath: '/' + file.path.replace(file.base, '').replace(/\/[^\/]*$/, '')
};
}))
.pipe(stylus()) // Uses file.data automatically
.pipe(gulp.dest('dist'));Full integration support for external sourcemap generation:
const sourcemaps = require('gulp-sourcemaps');
gulp.src('**/*.styl')
.pipe(sourcemaps.init())
.pipe(stylus({
compress: process.env.NODE_ENV === 'production'
}))
.pipe(sourcemaps.write('./maps'))
.pipe(gulp.dest('dist'));const gulp = require('gulp');
const stylus = require('gulp-stylus');
const autoprefixer = require('gulp-autoprefixer');
const cssnano = require('gulp-cssnano');
const sourcemaps = require('gulp-sourcemaps');
gulp.task('css', function() {
return gulp.src('src/styles/**/*.styl')
.pipe(sourcemaps.init())
.pipe(stylus({
'include css': true,
import: ['src/styles/variables.styl']
}))
.pipe(autoprefixer())
.pipe(cssnano())
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('dist/css'));
});