From 523249ae74bd4f087951779553a6d56e0d7f429b Mon Sep 17 00:00:00 2001 From: Jeff Escalante Date: Wed, 16 Mar 2016 15:15:21 -0400 Subject: [PATCH] add capability to pass other options as function syntax, parser, and stringifier can now be returned from an object in options.postcss and therefore passed as function, not strings only. --- README.md | 22 ++++++++++++++++++++++ index.js | 32 +++++++++++++++++++++----------- 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3efd488d..f56533fd 100644 --- a/README.md +++ b/README.md @@ -198,3 +198,25 @@ var css = require('postcss?parser=postcss-safe-parser!./broken') ``` [Safe Parser]: https://github.com/postcss/postcss-safe-parser + +If you need to pass the function directly instead of a module name, you can do so through the webpack postcss option, as such: + +```js +var sugarss = require('sugarss') +module.exports = { + module: { + loaders: [ + { + test: /\.css$/, + loader: "style-loader!css-loader!postcss-loader" + } + ] + }, + postcss: function () { + return { + plugins: [autoprefixer, precss], + syntax: sugarss + }; + } +} +``` diff --git a/index.js b/index.js index d642569c..b6561cb8 100644 --- a/index.js +++ b/index.js @@ -19,21 +19,31 @@ module.exports = function (source, map) { if ( typeof map === 'string' ) map = JSON.parse(map); if ( map && map.mappings ) opts.map.prev = map; - if ( params.syntax ) opts.syntax = require(params.syntax); - if ( params.parser ) opts.parser = require(params.parser); - if ( params.stringifier ) opts.stringifier = require(params.stringifier); - - var plugins = this.options.postcss; - if ( typeof plugins === 'function' ) { - plugins = plugins.call(this, this); + var plugins; + var options = this.options.postcss; + if ( typeof options === 'function' ) { + options = options.call(this, this); } - if ( typeof plugins === 'undefined' ) { + if ( typeof options === 'undefined' ) { plugins = []; } else if ( params.pack ) { - plugins = plugins[params.pack]; - } else if ( !Array.isArray(plugins) ) { - plugins = plugins.defaults; + plugins = options[params.pack]; + } else if ( !Array.isArray(options) ) { + plugins = options.plugins || options.defaults; + opts.syntax = options.syntax; + opts.parser = options.parser; + opts.stringifier = options.stringifier; + } + + if ( params.syntax && !opts.syntax ) { + opts.syntax = require(params.syntax); + } + if ( params.parser && !opts.parser ) { + opts.parser = require(params.parser); + } + if ( params.stringifier && !opts.stringifier ) { + opts.stringifier = require(params.stringifier); } var loader = this;