Nuxt/lib/builder/webpack/style-loader.js

77 lines
1.9 KiB
JavaScript
Raw Normal View History

const ExtractTextPlugin = require('extract-text-webpack-plugin')
const { join } = require('path')
2017-08-14 14:03:07 +00:00
module.exports = function styleLoader(ext, loaders = [], isVueLoader = false) {
2017-08-14 14:03:07 +00:00
// Normalize loaders
loaders = (Array.isArray(loaders) ? loaders : [loaders]).map(loader => {
if (typeof loader === 'string') {
loader = { loader }
2017-08-14 14:03:07 +00:00
}
return Object.assign({
options: {
sourceMap: this.options.build.cssSourceMap
}
}, loader)
2017-08-14 14:03:07 +00:00
})
// https://github.com/postcss/postcss-loader
let postcssLoader
2017-08-14 21:13:08 +00:00
if (!isVueLoader && this.options.build.postcss) {
2017-08-14 14:03:07 +00:00
postcssLoader = {
loader: 'postcss-loader',
2017-08-15 01:06:56 +00:00
options: this.options.build.postcss
}
2017-08-14 14:03:07 +00:00
}
// https://github.com/webpack-contrib/css-loader
const cssLoader = {
loader: 'css-loader',
options: {
minimize: true,
importLoaders: 1,
sourceMap: this.options.build.cssSourceMap,
alias: {
'/static': join(this.options.srcDir, 'static'),
'/assets': join(this.options.srcDir, 'assets')
}
}
}
// https://github.com/vuejs/vue-style-loader
const vueStyleLoader = {
loader: 'vue-style-loader',
options: {
sourceMap: this.options.build.cssSourceMap
}
}
2017-12-21 03:35:23 +00:00
if (this.options.build.extractCSS) {
const extraction = ExtractTextPlugin.extract({
2017-08-14 14:03:07 +00:00
fallback: vueStyleLoader,
use: [
cssLoader,
postcssLoader,
...loaders
].filter(l => l)
})
2017-12-21 03:35:23 +00:00
return this.options.dev ? ['css-hot-loader'].concat(extraction) : extraction
2017-08-14 14:03:07 +00:00
}
// https://github.com/yenshih/style-resources-loader
let styleResourcesLoader
if (this.options.build.styleResources) {
styleResourcesLoader = {
loader: 'style-resources-loader',
options: this.options.build.styleResources
}
}
2017-08-14 14:03:07 +00:00
return [
vueStyleLoader,
cssLoader,
postcssLoader,
...loaders,
styleResourcesLoader
2017-08-14 14:03:07 +00:00
].filter(l => l)
}