@zero-scripts/plugin-webpack-css
Version:
Adds processing CSS files: extracting, minify and add vendor prefixes
77 lines • 4.41 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.WebpackCssPlugin = void 0;
const mini_css_extract_plugin_1 = __importDefault(require("mini-css-extract-plugin"));
const optimize_css_assets_webpack_plugin_1 = __importDefault(require("optimize-css-assets-webpack-plugin"));
const core_1 = require("@zero-scripts/core");
const utils_webpack_styles_1 = require("@zero-scripts/utils-webpack-styles");
const webpack_config_1 = require("@zero-scripts/webpack-config");
const WebpackCssPluginOptions_1 = require("./WebpackCssPluginOptions");
const safePostCssParser = require('postcss-safe-parser');
const cssModuleRegex = /\.(module|m)\.css$/;
let WebpackCssPlugin = class WebpackCssPlugin extends core_1.AbstractPlugin {
apply(applyContext) {
applyContext.hooks.beforeRun.tap('WebpackCssPlugin', beforeRunContext => {
const webpackConfigBuilder = beforeRunContext.getConfigBuilder(webpack_config_1.WebpackConfig);
webpackConfigBuilder.hooks.build.tap('WebpackCssPlugin', (modifications, configOptions) => {
var _a;
const options = this.optionsContainer.build();
(_a = options.styleLoaders) === null || _a === void 0 ? void 0 : _a.forEach(rule => {
modifications.insertModuleRule({
test: new RegExp(rule.test),
exclude: rule.exclude ? new RegExp(rule.exclude) : undefined,
use: utils_webpack_styles_1.getStyleLoaders(mini_css_extract_plugin_1.default.loader, undefined, rule.preprocessor
? require.resolve(rule.preprocessor)
: undefined, require.resolve(rule.loader))(configOptions),
sideEffects: true
});
});
modifications.insertModuleRule({
test: /\.css$/,
exclude: cssModuleRegex,
sideEffects: true,
use: utils_webpack_styles_1.getStyleLoaders(mini_css_extract_plugin_1.default.loader)(configOptions)
});
modifications.insertModuleRule({
test: cssModuleRegex,
use: utils_webpack_styles_1.getStyleLoaders(mini_css_extract_plugin_1.default.loader, {
modules: {
getLocalIdent: utils_webpack_styles_1.getLocalIdent
}
})(configOptions)
});
if (!configOptions.isDev) {
modifications.insertPlugin(new mini_css_extract_plugin_1.default({
filename: 'css/[name].[contenthash:8].css',
chunkFilename: 'css/[name].[contenthash:8].chunk.css'
}), undefined, 'mini-css-extract-plugin');
}
modifications.insertMinimizer(new optimize_css_assets_webpack_plugin_1.default({
cssProcessorOptions: {
parser: safePostCssParser,
map: configOptions.useSourceMap
? {
inline: false,
annotation: true
}
: false
}
}), undefined, 'optimize-css-assets-plugin');
});
});
}
};
WebpackCssPlugin = __decorate([
core_1.ReadOptions(WebpackCssPluginOptions_1.WebpackCssPluginOptions, 'plugin-webpack-css')
], WebpackCssPlugin);
exports.WebpackCssPlugin = WebpackCssPlugin;
//# sourceMappingURL=WebpackCssPlugin.js.map