包详细信息

postcss-load-config

postcss84.8mMIT6.0.1

Autoload Config for PostCSS

postcss, postcssrc, postcss.config.js

自述文件

Load Config

Install

npm i -D postcss-load-config

Usage

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 project's package.json

Project (Root)
  |– client
  |– public
  |
  |- package.json
{
  "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

Project (Root)
  |– client
  |– public
  |
  |- (.postcssrc|.postcssrc.json|.postcssrc.yml)
  |- package.json

.postcssrc.json

{
  "parser": "sugarss",
  "map": false,
  "plugins": {
    "postcss-plugin": {}
  }
}

.postcssrc.yml

parser: sugarss
map: false
plugins:
  postcss-plugin: {}

[!NOTE] For YAML configs, you must have yaml installed as a peer dependency.

.postcssrc.js or postcss.config.js

You may need some logic within your config. In this case create JS/TS file named:

  • .postcssrc.js
  • .postcssrc.mjs
  • .postcssrc.cjs
  • .postcssrc.ts
  • .postcssrc.mts
  • .postcssrc.cts
  • postcss.config.js
  • postcss.config.mjs
  • postcss.config.cjs
  • postcss.config.ts
  • postcss.config.mts
  • postcss.config.cts

[!NOTE] For TypeScript configs, you must have tsx or jiti installed as a peer dependency.

Project (Root)
  |– client
  |– public
  |- (.postcssrc|postcss.config).(js|mjs|cjs|ts|mts|cts)
  |- package.json

You can export the config as an {Object}

.postcssrc.js

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

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

module.exports = ({ env }) => ({
  ...options,
  plugins: {
    'postcss-plugin': env === 'production' ? {} : false
  }
})

ℹ️ When using an {Object}, the key can be a Node.js module name, a path to a JavaScript file that is relative to the directory of the PostCSS config file, or an absolute path to a JavaScript file.

{Array}

.postcssrc.js

module.exports = ({ env }) => ({
  ...options,
  plugins: [
    env === 'production' ? require('postcss-plugin')() : false
  ]
})

:warning: When using an {Array}, make sure to require() each plugin

Options

Name Type Default Description
to {String} undefined Destination File Path
map `{String\ Object}` false Enable/Disable Source Maps
from {String} undefined Source File Path
parser `{String\ Function}` false Custom PostCSS Parser
syntax `{String\ Function}` false Custom PostCSS Syntax
stringifier `{String\ Function}` false Custom PostCSS Stringifier

parser

.postcssrc.js

module.exports = {
  parser: 'sugarss'
}

syntax

.postcssrc.js

module.exports = {
  syntax: 'postcss-scss'
}

stringifier

.postcssrc.js

module.exports = {
  stringifier: 'midas'
}

map

.postcssrc.js

module.exports = {
  map: 'inline'
}

:warning: 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

module.exports = {
  to: 'path/to/dest.css'
}

from

module.exports = {
  from: 'path/to/src.css'
}

Plugins

{} || null

The plugin will be loaded with defaults

'postcss-plugin': {} || null

.postcssrc.js

module.exports = {
  plugins: {
    'postcss-plugin': {} || null
  }
}

:warning: {} must be an empty {Object} literal

{Object}

The plugin will be loaded with given options

'postcss-plugin': { option: '', option: '' }

.postcssrc.js

module.exports = {
  plugins: {
    'postcss-plugin': { option: '', option: '' }
  }
}

false

The plugin will not be loaded

'postcss-plugin': false

.postcssrc.js

module.exports = {
  plugins: {
    'postcss-plugin': false
  }
}

Ordering

Plugin execution order is determined by declaration in the plugins section (top-down)

{
  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

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
  }
})
"scripts": {
  "build": "NODE_ENV=production node postcss",
  "start": "NODE_ENV=development node postcss"
}
const { readFileSync } = require('fs')

const postcss = require('postcss')
const postcssrc = require('postcss-load-config')

const css = readFileSync('index.css', 'utf8')

const ctx = { parser: true, map: 'inline' }

postcssrc(ctx).then(({ plugins, options }) => {
  postcss(plugins)
    .process(css, options)
    .then((result) => console.log(result.css))
})
"scripts": {
  "build": "NODE_ENV=production gulp",
  "start": "NODE_ENV=development gulp"
}
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'))
"scripts": {
  "build": "NODE_ENV=production webpack",
  "start": "NODE_ENV=development webpack-dev-server"
}

webpack.config.js

module.exports = (env) => ({
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'style-loader',
          'css-loader',
          'postcss-loader'
        ]
      }
    ]
  }
})

Maintainers


Michael Ciniawsky

Mateusz Derks

Contributors

</table

Security Contact

To report a security vulnerability, please use the Tidelift security contact. Tidelift will coordinate the fix and disclosure.


Ryan Dunckel

Patrick Gilday

Dalton Santos

François Wouts

更新日志

Changelog

All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

6.0.1 (2024-06-02)

Bug Fixes

  • Fixed bundlers support (#262)

6.0 (2024-06-02)

BREAKING CHANGES

  • Now you need to install yaml dependency to use .postcssrc.yml config (#261)

5.1.0 (2024-05-01)

Features

  • Allow to use tsx for TypeScript support (#260)

5.0.3 (2024-02-08)

Bug Fixes

  • Fixed update of ESM configs (#259)

5.0.2 (2023-05-23)

Bug Fixes

  • Fixed __require name conflict (#257)

5.0.1 (2023-05-23)

Bug Fixes

  • Fixed Windows support (#256)

5.0 (2023-11-20)

Features

  • Added ESM support for TypeScript config (#249)
  • Added ESM and TypeScript plugins support from JSON config (#254)

BREAKING CHANGES

  • Dropped Node.js 16 & 14 support.

4.0.2 (2023-11-20)

Bug Fixes

  • src/index: added support for .cts files (#252)
  • deps: updated lilconfig (#253)

4.0.1 (2022-05-31)

Bug Fixes

  • src/index: Fixed Windows support (#238)

4.0 (2022-05-23)

Features

  • Added support for ESM configs (#234)

BREAKING CHANGES

  • Dropped sync API.
  • Dropped Node.js 12 & 10 support.

3.1.4 (2022-03-29)

Bug Fixes

  • deps: Add postcss to optional peer dependencies to fix types (#233)

3.1.3 (2022-01-02)

Bug Fixes

  • src/index: Fix root path calculation for resolving relative path to plugins (#231)

3.1.2 (2022-01-02)

Bug Fixes

  • src/index: Load plugins from PostCSS config location instead of current working directory (#229)

3.1.1 (2022-01-02)

Bug Fixes

  • deps: Reduce dependencies by dropping import-cwd (#227)

3.1.0 (2021-06-14)

Features

  • Add .cjs config support (#218)
  • Add .ts config support (#218)

Bug Fixes

  • deps: Reduce dependencies by moving from cosmiconfig to lilconfig

3.0.1 (2021-02-07)

Features

  • src/index: Add type definition (#211)

3.0.0 (2020-09-26)

Features

  • src/index: Add .cjs config support.

BREAKING CHANGES

  • package: requires node >= v10.0.0

2.1.2 (2020-09-26)

Bug Fixes

  • package: Add funding links.

2.1.1 (2020-09-17)

Bug Fixes

  • plugins: fix PostCSS 8 plugin support (#177)

2.1.0 (2019-06-10)

Bug Fixes

  • plugins: add undefined to plugin options check (#177) (4349ea9)

Features

  • src/index: support synchronous config loading (rc.sync) (f230d40)

2.0.0 (2018-07-10)

Bug Fixes

  • package: require-from-string memory leak, updates cosmiconfig v2.1.0...4.0.0 (dependencies) (17f9621)
  • src/index.js: clone the config {Object} on assignment instead of mutating it (8669a90)

Features

  • src: load plugins from the current working directory (9745bf0)
  • src: show config file in err.message (4baff47)

BREAKING CHANGES

  • package: requires node >= v4.0.0
  • package: removes argv option (options.argv)
  • package: removes --config parsing

1.2.0 (2017-02-13)

Features

  • index: allow extensions for .postcssrc (0d3bf35)

1.1.0 (2017-01-11)

Features

  • index: config.file, improve error handling (a6c32fd)

1.0.0>) (2016-10-27)

Bug Fixes

  • index: behavior when config loading fails (b549bc6), closes #26
  • index: set NODE_ENV when undefined (b24501c)
  • index: support node v0.12 (0bbfa94)

Features

  • index: function support, jsdoc, cleanups (a78c580)