JSPM

  • Created
  • Published
  • Downloads 78
  • Score
    100M100P100Q63166F
  • License MIT

Modular CSS bundler

Package Exports

  • sheetify
  • sheetify/browser.js
  • sheetify/transform

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sheetify) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

sheetify

sheetify logo

NPM version build status Test coverage Downloads js-standard-style

Modular CSS bundler for browserify. Works with npm modules like browserify does.

Features

  • clarity: namespace CSS, no more need for naming schemes
  • modularity: import and reuse CSS packages from npm
  • extensibility: transform CSS using existing plugins, or write your own
  • transparency: inline CSS in your views
  • simplicity: tiny API surface and a minimal code base

Example

Given some inline CSS:

const vdom = require('virtual-dom')
const hyperx = require('hyperx')
const sf = require('sheetify')
const hx = hyperx(vdom.h)

const prefix = sf`
  h1 {
    text-align: center;
  }
`

const tree = hx`
  <section className=${prefix}>
    <h1>My beautiful, centered title</h1>
  </section>
`

document.body.appendChild(vdom.create(tree))

Compile with browserify using -t sheetify/transform:

$ browserify -t sheetify/transform index.js > bundle.js

CSS classes are namespaced based on the content hash:

._60ed23ec9f h1 {
  text-align: center;
}

And the rendered HTML includes the namespace:

<section class="._60ed23e">
  <h1>My beautiful, centered title</h1>
</section>

External files

To include an external CSS file you can pass a path to sheetify as sheetify('./my-file.css'):

const vdom = require('virtual-dom')
const hyperx = require('hyperx')
const sf = require('sheetify')
const hx = hyperx(vdom.h)

const prefix = sf('./my-styles.css')

const tree = hx`
  <section className=${prefix}>
    <h1>My beautiful, centered title</h1>
  </section>
`

document.body.appendChild(vdom.create(tree))

Use npm packages

To consume a package from npm that has .css file in its main or style field:

const sf = require('sheetify')

sf('normalize.css')

Packages from npm will not be namespaced by default.

Toggle namespaces

To toggle namespaces for external files or npm packages:

const sf = require('sheetify')

sf('./my-file.css', { global: true })

Write to separate file on disk

To write the compiled CSS to a separate file, rather than keep it in the bundle:

$ browserify -t [ sheetify/transform -o bundle.css ] index.js > bundle.js

Write to stream

To write the compiled CSS to a stream:

const browserify = require('browserify')
const fs = require('fs')

const b = browserify(path.join(__dirname, 'transform/source.js'))
const ws = fs.createWriteStream('/bundle.css')
b.transform('sheetify', { out: ws })
const r = b.bundle().pipe(fs.createWriteStream('./bundle.js'))
r.on('end', () => ws.end())

Browserify transforms don't know when browserify is done, so we have to attach a listener on browserify for the 'end' event to close the writeStream accordingly.

Plugins

Sheetify uses plugins that take CSS and apply a transform. For example include sheetify-cssnext to support autoprefixing, variables and more:

const vdom = require('virtual-dom')
const hyperx = require('hyperx')
const sf = require('sheetify')
const hx = hyperx(vdom.h)

const prefix = sf`
  h1 {
    transform: translate(0, 0);
  }
`

const tree = hx`
  <section className=${prefix}>
    <h1>My beautiful, centered title</h1>
  </section>
`

document.body.appendChild(vdom.create(tree))

Compile with browserify using -t [ sheetify/transform -u sheetify-cssnext ]:

$ browserify -t [ sheetify/transform -u sheetify-cssnext ] index.js > bundle.js

Transforms the CSS into:

h1 {
  -webkit-transform: translate(0, 0);
          transform: translate(0, 0);
}

The following plugins are available:

API

Browserify transforms accept either flags from the command line using subargs:

$ browserify -t [ sheetify/transform -o bundle.css ] index.js > bundle.js

Or the equivalent options by passing in a configuration object in the JavaScript API:

const browserify = require('browserify')

const b = browserify(path.join(__dirname, 'transform/source.js'))
b.transform('sheetify', { out: path.join(__dirname, '/bundle.css') })
b.bundle().pipe(process.stdout)

The following options are available:

Options:
  -o, --out    Specify an output file
  -u, --use    Consume a sheetify plugin

Installation

$ npm install sheetify

License

MIT