123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- const load = require('postcss-load-config')
- let loaded
- function isObject (val) {
- return val && typeof val === 'object'
- }
- module.exports = function loadPostcssConfig (loaderContext, inlineConfig = {}) {
- if (inlineConfig.useConfigFile === false) {
- return Promise.resolve({
- plugins: inlineConfig.plugins || [],
- options: inlineConfig.options || {}
- })
- }
- if (process.env.VUE_LOADER_TEST || !loaded) {
- const config = inlineConfig.config || {}
- const ctx = { webpack: loaderContext }
- if (config.ctx) {
- ctx.options = config.ctx
- }
- loaded = load(ctx, config.path, { argv: false }).catch(err => {
- // postcss-load-config throws error when no config file is found,
- // but for us it's optional. only emit other errors
- if (err.message.indexOf('No PostCSS Config found') >= 0) {
- return
- }
- const friendlyErr = new Error(`Error loading PostCSS config: ${err.message}`)
- Error.captureStackTrace(friendlyErr, err)
- loaderContext.emitError(friendlyErr)
- })
- }
- return loaded.then(config => {
- let plugins = []
- let options = {}
- // inline postcss options for vue-loader
- if (typeof inlineConfig === 'function') {
- inlineConfig = inlineConfig.call(this, this)
- }
- if (Array.isArray(inlineConfig)) {
- plugins = inlineConfig
- } else if (isObject(inlineConfig)) {
- plugins =
- typeof inlineConfig.plugins === 'function'
- ? inlineConfig.plugins.call(this, this)
- : inlineConfig.plugins || []
- options = inlineConfig.options || {}
- }
- // merge postcss config file
- if (config && config.plugins) {
- plugins = plugins.concat(config.plugins)
- }
- if (config && config.options) {
- options = Object.assign({}, config.options, options)
- }
- return {
- plugins,
- options
- }
- })
- }
|