Skip to content

A Metalsmith plugin that sends your CSS through any PostCSS plugins

License

Notifications You must be signed in to change notification settings

axa-ch/metalsmith-postcss

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

87 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

metalsmith-postcss

Build Status Greenkeeper badge Known Vulnerabilities NSP Status

A Metalsmith plugin that sends your CSS through any PostCSS plugins.

Installation

npm install metalsmith-postcss

Getting Started

If you haven't checked out Metalsmith before, head over to their website and check out the documentation.

JavaScript API

Using the JavaScript api for Metalsmith, just add the postcss package name, optionally with it’s options, to your .use() directives. Here is an example using postcss-pseudoelements and postcss-nested to transform your source files.

var postcss = require('metalsmith-postcss');

metalsmith.use(postcss({
  plugins: {
    'postcss-pseudoelements': {}
    'postcss-nested': {}
  }
}));

By default, files with .css extension will be parsed. This may be overridden by providing a custom pattern e.g.

metalsmith.use(postcss({
  pattern: '*.postcss',
  plugins: { ... }
}));

Metalsmith CLI

Using the Metalsmith CLI, just add the postcss package name, optionally with it’s options, to your metalsmith.json config. Here is an example using postcss-pseudoelements and postcss-nested to transform your source files.

"metalsmith-postcss": {
  "plugins": {
    "postcss-pseudoelements": {},
    "postcss-nested": {}
  },
  "map": true
}

Alternative plugin definition syntax

Sometime in PostCSS, plugins need to be defined in a certain order and JavaScript Objects cannot guarantee the order of keys in an object. Therefore, you are able to specify PostCSS plugins using an array of objects(which can guarantee the order of loading).

"metalsmith-postcss": {
  "plugins": [
    "postcss-pseudoelements",
    {
      "postcss-nested": {
        "some": "config"
      }
    }
  ]
}

Sourcemaps

This plugin doesn't generate sourcemaps by default. However, you can enable them using several ways.

Inline sourcemaps

Add map: true to the options argument to get your sourcemaps written into the source file.

metalsmith.use(postcss({
  plugins: {},
  map: true
}));

Behind the scenes, this resolves to the following:

metalsmith.use(postcss({
  plugins: {},
  map: {
    inline: true
  }
}));

External sourcemaps

If you don't want to have your files polluted with sourcemaps, just set inline: false. Using that, you'll get .map files generated beside your sources.

metalsmith.use(postcss({
  plugins: {},
  map: {
    inline: false
  }
}));

Test

To run the tests use:

npm test