UNPKG

unused-files-webpack-plugin

Version:

Glob all files that are not compiled by webpack under webpack's context

114 lines (96 loc) 2.98 kB
"use strict"; var _interopRequireDefault = require("babel-runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.UnusedFilesWebpackPlugin = void 0; var _keys = _interopRequireDefault( require("babel-runtime/core-js/object/keys") ); var _extends2 = _interopRequireDefault( require("babel-runtime/helpers/extends") ); var _path = _interopRequireDefault(require("path")); var _warning = _interopRequireDefault(require("warning")); var _globAll = _interopRequireDefault(require("glob-all")); var _util = _interopRequireDefault(require("util.promisify")); const globAll = (0, _util.default)(_globAll.default); function globOptionsWith(compiler, globOptions) { return (0, _extends2.default)( { cwd: compiler.context }, globOptions ); } function getFileDepsMap(compilation) { const fileDepsBy = [...compilation.fileDependencies].reduce( (acc, usedFilepath) => { acc[usedFilepath] = true; return acc; }, {} ); const { assets } = compilation; (0, _keys.default)(assets).forEach(assetRelpath => { const existsAt = assets[assetRelpath].existsAt; fileDepsBy[existsAt] = true; }); return fileDepsBy; } async function applyAfterEmit(compiler, compilation, plugin) { try { const globOptions = globOptionsWith(compiler, plugin.globOptions); const fileDepsMap = getFileDepsMap(compilation); const files = await globAll( plugin.options.patterns || plugin.options.pattern, globOptions ); const unused = files.filter( it => !fileDepsMap[_path.default.join(globOptions.cwd, it)] ); if (unused.length !== 0) { throw new Error(` UnusedFilesWebpackPlugin found some unused files: ${unused.join(`\n`)}`); } } catch (error) { if (plugin.options.failOnUnused && compilation.bail) { throw error; } const errorsList = plugin.options.failOnUnused ? compilation.errors : compilation.warnings; errorsList.push(error); } } class UnusedFilesWebpackPlugin { constructor(options = {}) { (0, _warning.default)( !options.pattern, ` "options.pattern" is deprecated and will be removed in v4.0.0. Use "options.patterns" instead, which supports array of patterns and exclude pattern. See https://www.npmjs.com/package/glob-all#notes ` ); this.options = (0, _extends2.default)({}, options, { patterns: options.patterns || options.pattern || [`**/*.*`], failOnUnused: options.failOnUnused === true }); this.globOptions = (0, _extends2.default)( { ignore: `node_modules/**/*` }, options.globOptions ); } apply(compiler) { compiler.plugin(`after-emit`, (compilation, done) => applyAfterEmit(compiler, compilation, this).then(done, done) ); } } exports.UnusedFilesWebpackPlugin = UnusedFilesWebpackPlugin; var _default = UnusedFilesWebpackPlugin; exports.default = _default;