Robust, expressive, and feature-rich CSS superset with dynamic preprocessing capabilities
—
Express/Connect middleware for automatic Stylus compilation in web applications with configurable paths, compression, source maps, and development features.
Core middleware function for integrating Stylus compilation into web servers.
/**
* Create Stylus middleware for Express/Connect applications
* @param {MiddlewareOptions} options - Middleware configuration
* @returns {Function} Express/Connect middleware function
*/
function middleware(options);The returned middleware function signature.
/**
* Stylus middleware function (returned by middleware())
* @param {Request} req - Express request object
* @param {Response} res - Express response object
* @param {Function} next - Next middleware function
*/
function stylusMiddleware(req, res, next);interface MiddlewareOptions {
/** Source directory for Stylus files */
src: string;
/** Destination directory for compiled CSS (defaults to src) */
dest?: string;
/** Custom compile function */
compile?: (str: string, path: string) => string;
/** Compress output CSS */
compress?: boolean;
/** Include Firebug debug information */
firebug?: boolean;
/** Include line numbers in output */
linenos?: boolean;
/** Generate source maps */
sourcemap?: boolean | SourceMapOptions;
/** Force recompilation on every request */
force?: boolean;
}
interface SourceMapOptions {
/** Include source map comment in CSS */
comment?: boolean;
/** Inline source map in CSS */
inline?: boolean;
/** Include source content in source map */
sourcesContent?: boolean;
/** Base path for source map URLs */
basePath?: string;
}const express = require('express');
const stylus = require('stylus');
const app = express();
// Basic middleware setup
app.use(stylus.middleware({
src: __dirname + '/public'
}));
app.use(express.static(__dirname + '/public'));
app.listen(3000);const express = require('express');
const stylus = require('stylus');
const path = require('path');
const app = express();
// Advanced middleware with all options
app.use(stylus.middleware({
// Source directory for .styl files
src: path.join(__dirname, 'src/styles'),
// Destination directory for .css files
dest: path.join(__dirname, 'public/css'),
// Compression for production
compress: process.env.NODE_ENV === 'production',
// Debug information for development
firebug: process.env.NODE_ENV === 'development',
linenos: process.env.NODE_ENV === 'development',
// Source maps
sourcemap: {
comment: true,
inline: process.env.NODE_ENV === 'development',
sourcesContent: true
},
// Force recompilation in development
force: process.env.NODE_ENV === 'development'
}));
// Serve static files
app.use(express.static(path.join(__dirname, 'public')));const express = require('express');
const stylus = require('stylus');
const nib = require('nib');
const app = express();
app.use(stylus.middleware({
src: __dirname + '/public',
// Custom compilation with plugins
compile: function(str, path) {
return stylus(str)
.set('filename', path)
.set('compress', true)
.use(nib())
.import('nib');
}
}));
app.use(express.static(__dirname + '/public'));const express = require('express');
const stylus = require('stylus');
const app = express();
// Compile from src/ to public/css/
app.use(stylus.middleware({
src: __dirname + '/src/styles', // .styl files location
dest: __dirname + '/public/css', // .css files output
compress: true
}));
// Serve compiled CSS from public/css/
app.use('/css', express.static(__dirname + '/public/css'));
// Serve other static files
app.use(express.static(__dirname + '/public'));const express = require('express');
const stylus = require('stylus');
const app = express();
const isDevelopment = process.env.NODE_ENV === 'development';
app.use(stylus.middleware({
src: __dirname + '/src/styles',
dest: __dirname + '/public/css',
// Development settings
compress: !isDevelopment,
linenos: isDevelopment,
firebug: isDevelopment,
force: isDevelopment,
// Source maps in development
sourcemap: isDevelopment ? {
inline: true,
sourcesContent: true
} : false
}));const express = require('express');
const stylus = require('stylus');
const nib = require('nib');
const autoprefixer = require('autoprefixer-stylus');
const app = express();
app.use(stylus.middleware({
src: __dirname + '/src/styles',
dest: __dirname + '/public/css',
compile: function(str, path) {
return stylus(str)
.set('filename', path)
.set('compress', process.env.NODE_ENV === 'production')
.include(__dirname + '/src/styles/mixins')
.include(__dirname + '/src/styles/variables')
.use(nib())
.use(autoprefixer())
.import('nib');
}
}));project/
├── src/
│ └── styles/
│ ├── main.styl
│ ├── variables.styl
│ └── mixins/
│ └── buttons.styl
├── public/
│ ├── css/ # Generated CSS files
│ ├── js/
│ └── images/
└── app.jsconst express = require('express');
const stylus = require('stylus');
const path = require('path');
const app = express();
const port = process.env.PORT || 3000;
// Stylus middleware
app.use(stylus.middleware({
src: path.join(__dirname, 'src/styles'),
dest: path.join(__dirname, 'public/css'),
compress: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV === 'development',
force: process.env.NODE_ENV === 'development'
}));
// Static file serving
app.use(express.static(path.join(__dirname, 'public')));
// Routes
app.get('/', (req, res) => {
res.send(`
<html>
<head>
<link rel="stylesheet" href="/css/main.css">
</head>
<body>
<h1>Stylus Middleware Example</h1>
</body>
</html>
`);
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});const express = require('express');
const stylus = require('stylus');
const app = express();
app.use(stylus.middleware({
src: __dirname + '/src/styles',
dest: __dirname + '/public/css',
compile: function(str, path) {
try {
return stylus(str)
.set('filename', path)
.render();
} catch (err) {
console.error('Stylus compilation error:', err.message);
throw err;
}
}
}));
// Error handling middleware
app.use((err, req, res, next) => {
if (err && err.name === 'ParseError') {
console.error('Stylus parse error:', err.message);
res.status(500).send('CSS compilation error: ' + err.message);
} else {
next(err);
}
});The middleware automatically handles:
Performance tips:
// For production - disable force compilation
app.use(stylus.middleware({
src: __dirname + '/styles',
force: false, // Only compile when files change
compress: true // Minify output
}));
// For development - enable debugging features
app.use(stylus.middleware({
src: __dirname + '/styles',
force: true, // Always recompile for debugging
linenos: true, // Line numbers for debugging
sourcemap: true // Source maps for debugging
}));Install with Tessl CLI
npx tessl i tessl/npm-stylus