UNPKG

image-minimizer-webpack-plugin

Version:

Webpack loader and plugin to optimize (compress) images using imagemin

84 lines (63 loc) 2.08 kB
"use strict"; var _path = _interopRequireDefault(require("path")); var _loaderUtils = _interopRequireDefault(require("loader-utils")); var _schemaUtils = require("schema-utils"); var _minify = _interopRequireDefault(require("./minify")); var _interpolateName = _interopRequireDefault(require("./utils/interpolate-name")); var _loaderOptions = _interopRequireDefault(require("./loader-options.json")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = async function loader(content) { const options = _loaderUtils.default.getOptions(this); (0, _schemaUtils.validate)(_loaderOptions.default, options, { name: 'Image Minimizer Plugin Loader', baseDataPath: 'options' }); const callback = this.async(); const name = _path.default.relative(this.rootContext, this.resourcePath); if (options.filter && !options.filter(content, name)) { callback(null, content); return; } const input = content; const { severityError, minimizerOptions } = options; const minifyOptions = { input, filename: name, severityError, minimizerOptions, isProductionMode: this.mode === 'production' || !this.mode }; const output = await (0, _minify.default)(minifyOptions); if (output.errors && output.errors.length > 0) { output.errors.forEach(warning => { this.emitError(warning); }); callback(null, content); return; } output.source = output.output; if (output.warnings && output.warnings.length > 0) { output.warnings.forEach(warning => { this.emitWarning(warning); }); } const { source } = output; const newName = (0, _interpolateName.default)(name, options.filename || '[path][name][ext]'); const isNewAsset = name !== newName; if (isNewAsset) { this.emitFile(newName, source, null, { minimized: true }); if (options.deleteOriginalAssets) {// TODO remove original asset } callback(null, content); return; } callback(null, source); }; module.exports.raw = true;