Load Config
Install
Copy npm i -D postcss-load-config
Usage
Copy npm i -S | -D postcss-plugin
Install all required postcss plugins and save them to your package.json dependencies
/devDependencies
Then create a postcss config file by choosing one of the following formats
package.json
Create a postcss
section in your projects package.json
Copy Project (Root)
|– client
|– public
|
|- package.json
Copy {
"postcss" : {
"parser" : "sugarss" ,
"map" : false ,
"plugins" : {
"postcss-plugin" : {}
}
}
}
.postcssrc
Create a .postcssrc
file in JSON or YAML format
ℹ️ It's recommended to use an extension (e.g .postcssrc.json
or .postcssrc.yml
) instead of .postcssrc
Copy Project (Root)
|– client
|– public
|
|- (.postcssrc|.postcssrc.json|.postcssrc.yml)
|- package.json
.postcssrc.json
Copy {
"parser" : "sugarss" ,
"map" : false ,
"plugins" : {
"postcss-plugin" : {}
}
}
.postcssrc.yml
Copy parser : sugarss
map : false
plugins :
postcss-plugin : {}
.postcssrc.js
or postcss.config.js
You may need some logic within your config. In this case create JS file named .postcssrc.js
or postcss.config.js
Copy Project (Root)
|– client
|– public
|
|- (.postcssrc.js|postcss.config.js)
|- package.json
You can export the config as an {Object}
.postcssrc.js
Copy module . exports = {
parser : 'sugarss' ,
map : false ,
plugins : {
'postcss-plugin' : {}
}
}
Or export a {Function}
that returns the config (more about the ctx
param below)
.postcssrc.js
Copy module . exports = (ctx) => ({
parser : ctx .parser ? 'sugarss' : false ,
map : ctx .env === 'development' ? ctx .map : false ,
plugins : {
'postcss-plugin' : ctx . options .plugin
}
})
Plugins can be loaded either using an {Object}
or an {Array}
{Object}
.postcssrc.js
Copy module . exports = ({ env }) => ({
... options
plugins: {
'postcss-plugin' : env === 'production' ? {} : false
}
})
{Array}
.postcssrc.js
Copy module . exports = ({ env }) => ({
... options
plugins: [
env === 'production' ? require ( 'postcss-plugin' )() : false
]
})
⚠️ When using an {Array}
, make sure to require()
each plugin
Options
Name
Type
Default
Description
Enable/Disable Source Maps
Custom PostCSS Stringifier
parser
.postcssrc.js
Copy module . exports = {
parser : 'sugarss'
}
syntax
.postcssrc.js
Copy module . exports = {
syntax : 'postcss-scss'
}
stringifier
.postcssrc.js
Copy module . exports = {
stringifier : 'midas'
}
.postcssrc.js
Copy module . exports = {
map : 'inline'
}
⚠️ In most cases options.from
&& options.to
are set by the third-party which integrates this package (CLI, gulp, webpack). It's unlikely one needs to set/use options.from
&& options.to
within a config file. Unless you're a third-party plugin author using this module and its Node API directly dont't set options.from
&& options.to
yourself
to
Copy module . exports = {
to : 'path/to/dest.css'
}
from
Copy module . exports = {
from : 'path/to/src.css'
}
Plugins
{} || null
The plugin will be loaded with defaults
Copy 'postcss-plugin' : {} || null
.postcssrc.js
Copy module . exports = {
plugins : {
'postcss-plugin' : {} || null
}
}
⚠️ {}
must be an empty {Object}
literal
{Object}
The plugin will be loaded with given options
Copy 'postcss-plugin' : { option : '' , option : '' }
.postcssrc.js
Copy module . exports = {
plugins : {
'postcss-plugin' : { option : '' , option : '' }
}
}
false
The plugin will not be loaded
Copy 'postcss-plugin' : false
.postcssrc.js
Copy module . exports = {
plugins : {
'postcss-plugin' : false
}
}
Ordering
Plugin execution order is determined by declaration in the plugins section (top-down )
Copy {
plugins : {
'postcss-plugin' : {} , // [0]
'postcss-plugin' : {} , // [1]
'postcss-plugin' : {} // [2]
}
}
Context
When using a {Function}
(postcss.config.js
or .postcssrc.js
), it's possible to pass context to postcss-load-config
, which will be evaluated while loading your config. By default ctx.env (process.env.NODE_ENV)
and ctx.cwd (process.cwd())
are available on the ctx
{Object}
ℹ️ Most third-party integrations add additional properties to the ctx
(e.g postcss-loader
). Check the specific module's README for more information about what is available on the respective ctx
Examples
postcss.config.js
Copy module . exports = (ctx) => ({
parser : ctx .parser ? 'sugarss' : false ,
map : ctx .env === 'development' ? ctx .map : false ,
plugins : {
'postcss-import' : {} ,
'postcss-nested' : {} ,
cssnano : ctx .env === 'production' ? {} : false
}
})
Copy "scripts" : {
"build" : "NODE_ENV=production node postcss" ,
"start" : "NODE_ENV=development node postcss"
}
Copy const { readFileSync } = require ( 'fs' )
const postcss = require ( 'postcss' )
const postcssrc = require ( 'postcss-load-config' )
const css = readFileSync ( 'index.sss' , 'utf8' )
const ctx = { parser : true , map : 'inline' }
postcssrc (ctx) .then (({ plugins , options }) => {
postcss (plugins)
.process (css , options)
.then ((result) => console .log ( result .css))
})
Copy "scripts" : {
"build" : "NODE_ENV=production gulp" ,
"start" : "NODE_ENV=development gulp"
}
Copy const { task , src , dest , series , watch } = require ( 'gulp' )
const postcss = require ( 'gulp-postcssrc' )
const css = () => {
src ( 'src/*.css' )
.pipe ( postcss ())
.pipe ( dest ( 'dest' ))
})
task ( 'watch' , () => {
watch ([ 'src/*.css' , 'postcss.config.js' ] , css)
})
task ( 'default' , series (css , 'watch' ))
Copy "scripts" : {
"build" : "NODE_ENV=production webpack" ,
"start" : "NODE_ENV=development webpack-dev-server"
}
webpack.config.js
Copy module . exports = (env) => ({
module : {
rules : [
{
test : /\.css $ / ,
use : [
'style-loader' ,
'css-loader' ,
'postcss-loader'
]
}
]
}
})
Maintainers
Contributors