84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
|
|
var _resolve = _interopRequireDefault(require("./resolve"));
|
|
|
|
exports.onCreateWebpackConfig = ({
|
|
actions,
|
|
stage,
|
|
rules,
|
|
plugins,
|
|
loaders
|
|
}, _ref) => {
|
|
let {
|
|
cssLoaderOptions = {},
|
|
postCssPlugins,
|
|
useResolveUrlLoader,
|
|
sassRuleTest,
|
|
sassRuleModulesTest
|
|
} = _ref,
|
|
sassOptions = (0, _objectWithoutPropertiesLoose2.default)(_ref, ["cssLoaderOptions", "postCssPlugins", "useResolveUrlLoader", "sassRuleTest", "sassRuleModulesTest"]);
|
|
const {
|
|
setWebpackConfig
|
|
} = actions;
|
|
const PRODUCTION = stage !== `develop`;
|
|
const isSSR = stage.includes(`html`);
|
|
const sassLoader = {
|
|
loader: (0, _resolve.default)(`sass-loader`),
|
|
options: Object.assign({
|
|
sourceMap: useResolveUrlLoader ? true : !PRODUCTION
|
|
}, sassOptions)
|
|
};
|
|
const sassRule = {
|
|
test: sassRuleTest || /\.s(a|c)ss$/,
|
|
use: isSSR ? [loaders.null()] : [loaders.miniCssExtract(), loaders.css(Object.assign({}, cssLoaderOptions, {
|
|
importLoaders: 2
|
|
})), loaders.postcss({
|
|
plugins: postCssPlugins
|
|
}), sassLoader]
|
|
};
|
|
const sassRuleModules = {
|
|
test: sassRuleModulesTest || /\.module\.s(a|c)ss$/,
|
|
use: [!isSSR && loaders.miniCssExtract({
|
|
hmr: false
|
|
}), loaders.css(Object.assign({}, cssLoaderOptions, {
|
|
modules: true,
|
|
importLoaders: 2
|
|
})), loaders.postcss({
|
|
plugins: postCssPlugins
|
|
}), sassLoader].filter(Boolean)
|
|
};
|
|
|
|
if (useResolveUrlLoader && !isSSR) {
|
|
sassRule.use.splice(-1, 0, {
|
|
loader: `resolve-url-loader`,
|
|
options: useResolveUrlLoader.options ? useResolveUrlLoader.options : {}
|
|
});
|
|
sassRuleModules.use.splice(-1, 0, {
|
|
loader: `resolve-url-loader`,
|
|
options: useResolveUrlLoader.options ? useResolveUrlLoader.options : {}
|
|
});
|
|
}
|
|
|
|
let configRules = [];
|
|
|
|
switch (stage) {
|
|
case `develop`:
|
|
case `build-javascript`:
|
|
case `build-html`:
|
|
case `develop-html`:
|
|
configRules = configRules.concat([{
|
|
oneOf: [sassRuleModules, sassRule]
|
|
}]);
|
|
break;
|
|
}
|
|
|
|
setWebpackConfig({
|
|
module: {
|
|
rules: configRules
|
|
}
|
|
});
|
|
}; |