inkstitch/electron/service/config/css.js

73 wiersze
1.5 KiB
JavaScript

'use strict'
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const isProd = process.env.NODE_ENV === 'production'
const plugins = []
if (isProd) {
const filename = 'css/[name].[contenthash:8].css'
plugins.push(
new MiniCssExtractPlugin({
filename,
chunkFilename: filename,
})
)
}
const genStyleRules = () => {
const cssLoader = {
loader: 'css-loader',
options: {
// how many loaders before css-loader should be applied to [@import]ed resources.
// stylePostLoader injected by vue-loader + postcss-loader
importLoaders: 1 + 1,
esModule: false, // css-loader using ES Modules as default in v4, but vue-style-loader support cjs only.
},
}
const postcssLoader = {
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [require('autoprefixer')]
},
},
}
const extractPluginLoader = {
loader: MiniCssExtractPlugin.loader,
}
const vueStyleLoader = {
loader: 'vue-style-loader',
}
function createCSSRule(test, loader, loaderOptions) {
const loaders = [cssLoader, postcssLoader]
if (isProd) {
loaders.unshift(extractPluginLoader)
} else {
loaders.unshift(vueStyleLoader)
}
if (loader) {
loaders.push({ loader, options: loaderOptions })
}
return { test, use: loaders }
}
return [
createCSSRule(/\.css$/),
createCSSRule(/\.p(ost)?css$/),
createCSSRule(/\.scss$/, 'sass-loader')
]
}
module.exports = {
plugins,
module: {
rules: genStyleRules(),
},
}