lepu-test-platform-web/node_modules/vue-loader/lib/style-compiler/load-postcss-config.js

67 lines
1.8 KiB
JavaScript

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
}
})
}