npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

xcss

v1.2.5

Published

Programmable stylesheets

Downloads

49

Readme

xCSS

xCSS is a JavaScript library for programmatic stylesheet composition and a syntax sugar on top of it.

The idea is to produce CSS by composing data structures in JavaScript. That way you don't need preprocessors like Sass, Less or Stylus. Instead, all the power of JavaScript is at your fingertips.

Moreover xCSS is based on Node.js and allows you to reuse its module system and even package manager, npm with thousands of packages there.

Writing CSS with JavaScript can be verbose. To fix that xCSS provides a compiler from xCSS (a language, a superset of CSS) to JavaScript.

A xCSS module looks like:

@import "./other-stylesheet.css";

@require "some-pkg/theme" as theme;

.Component {
  width: 12px;
  background-color: {theme.bgColor};
}

It compiles into the following JavaScript module which is essentially a CommonJS (Node.js) module which uses xCSS object model:

var xcss = require("xcss"),
    theme = require("some-pkg/theme");

module.exports = xcss.om.stylesheet(null,
  xcss.om.import(require("./other-stylesheet.css")),
  xcss.om.rule('.Component', {
    width: '12px',
    backgroundColor: theme.bgColor
  })
);

Now to get the CSS string from that you just need to evaluate this module in Node, the module's value is a xcss.om.Stylesheet object which has .toCSS() method.

Installation

Install via npm:

% npm install --global xcss

Using from command-line

After installation there's xcss command line utility, which generates a CSS from a given xCSS module:

% xcss ./index.css > bundle.css

Run xcss --help to see more options:

Usage: xcss [options] <filename>

Compile xCSS to CSS and print the result.

Options:

    -c, --compress  Compress the resulted stylesheet

    --object-model  Print the result of translation from xCSS to JavaScript

        -h, --help  Show this message and exit

Using from Node.js

xCSS modules are just Node modules but expressed in a different syntax. That basically means that you'll be able to require xCSS modules directly:

// this line is needed to install .css handle
require('xcss');

// require .css directly!
var stylesheet = require('./index.css');

// generate CSS and print it
console.log(stylesheet.toCSS());

You can transform stylesheets in any way you want, for example, combine two stylsheets together:

var button = require('./button.css');
var select = require('./select.css');

console.log(button.concat(select));

Using as a browserify plugin

Since 3.28.0 version browserify has a new feature called plugins. This allows you to run xcss along with browserify and extract references to stylesheets from your code, so you can write:

require('./styles.css');

...

and have ./styles.css bundled in a resulted stylesheet bundle.

The command-line usage of browserify + xcss looks like:

browserify -p [ xcss -o ./bundle.css ] -o ./bundle.js ./index.js

After running this you will have bundle.js and bundle.css created in the directory.

If you use browserify programmatically, then usage is as follows:

var fs = require('fs')
var browserify = require('browserify')
var xcss = require('xcss')

var b = browserify('./index.js').plugin(xcss)
var stream = b.bundle()
stream.pipe(fs.createWriteStream('bundle.js'))
stream.css.pipe(fs.createWriteStream('bundle.css'))

As you can see, there's stream.css stream which you can pipe to the destination.