66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
'use strict';
|
|
|
|
const ExtractText = require('extract-text-webpack-plugin');
|
|
const path = require('path');
|
|
|
|
function rootPath() {
|
|
const rootDir = path.resolve(__dirname, '..');
|
|
return relayArguments(path.resolve, rootDir, arguments);
|
|
}
|
|
exports.rootPath = rootPath;
|
|
|
|
function srcPath() {
|
|
return relayArguments(rootPath, 'src', arguments);
|
|
};
|
|
exports.srcPath = srcPath;
|
|
|
|
function relayArguments(method, prefix, args) {
|
|
const fullArguments = [prefix].concat(
|
|
Array.prototype.slice.apply(args)
|
|
);
|
|
|
|
return method.apply(null, fullArguments);
|
|
}
|
|
exports.relayArguments = relayArguments;
|
|
|
|
exports.buildRules = (excludes, extraRules) => {
|
|
let cssExtractExcludes = [srcPath()];
|
|
let sassLoaderExcludes = [/node_modules/];
|
|
let rules;
|
|
|
|
excludes = excludes || {};
|
|
if (excludes.cssExtract) {
|
|
cssExtractExcludes = cssExtractExcludes.concat(excludes.cssExtract);
|
|
}
|
|
|
|
if (excludes.sassLoader) {
|
|
sassLoaderExcludes = sassLoaderExcludes.concat(excludes.sassLoader);
|
|
}
|
|
|
|
rules = [
|
|
{
|
|
exclude: cssExtractExcludes,
|
|
test: /\.css$/,
|
|
use: ExtractText.extract({
|
|
fallback: 'style-loader',
|
|
use: 'css-loader?sourceMap'
|
|
})
|
|
},
|
|
{
|
|
exclude: /node_modules/,
|
|
test: /\.css$/,
|
|
use: ['css-to-string-loader', 'css-loader']
|
|
},
|
|
{
|
|
exclude: sassLoaderExcludes,
|
|
use: ['css-to-string-loader', 'css-loader', 'sass-loader'],
|
|
test: /\.scss$/
|
|
}
|
|
];
|
|
|
|
if (extraRules) {
|
|
rules = rules.concat(extraRules);
|
|
}
|
|
|
|
return rules;
|
|
};
|