UNPKG

useless-files-clean-webpack-plugin

Version:

查询(删除)项目中未使用文件的webpack插件,支持多个版本,详情请查看版本支持清单

1 lines 3.21 kB
"use strict";var _createClass=function(){function t(e,n){for(var i=0;i<n.length;i++){var t=n[i];t.enumerable=t.enumerable||!1,t.configurable=!0,"value"in t&&(t.writable=!0),Object.defineProperty(e,t.key,t)}}return function(e,n,i){return n&&t(e.prototype,n),i&&t(e,i),e}}();function _classCallCheck(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}var fs=require("fs"),path=require("path"),_require=require("minimatch"),minimatch=_require.minimatch,_require2=require("os"),type=_require2.type;function traversal(n,i){fs.readdirSync(n).forEach(function(e){e=path.join(n,e);isDir(e)?traversal(e,i):i&&i(e)})}function isDir(e){return fs.statSync(e).isDirectory()}function log(e,n){var i={green:["",""],red:["",""],yellow:["",""],yellowBG:["",""]};n?console.log(i[n][0]+"%s"+i[n][1],e):console.log(e)}module.exports=function(){function n(e){_classCallCheck(this,n),this.options=e,this.depFileList=[]}return _createClass(n,[{key:"apply",value:function(e){var n=this;function i(e){n.findDepFile(e),n.doneFile()}e&&e.hooks&&e.hooks.compilation&&e.hooks.compilation.tap?e.hooks.afterEmit.tap("UselessFilesCleanWebpackPlugin",function(e){i(Array.from(e.fileDependencies))}):e.plugin("after-emit",function(e,n){i(e.fileDependencies),n()})}},{key:"findAllFile",value:function(){var e=this.options,n=e.root,e=e.exclude,i=void 0===e?[]:e,t=[];return traversal(n,function(n){i.some(function(e){return minimatch(n,e)})||t.push(path.resolve(n).toLowerCase())}),t}},{key:"findDepFile",value:function(e){this.depFileList=e.reduce(function(e,n){return minimatch(n,"**/node_modules/**")||e.push(n.toLowerCase()),e},[])}},{key:"findUnUsedFileList",value:function(i,e){return e.reduce(function(e,n){return i.includes(n)||e.push(n),e},[])}},{key:"delete",value:function(e){e.forEach(function(e){fs.unlinkSync(e)})}},{key:"log",value:function(e){var n,i=this.options,t=i.out,o=i.log,o=void 0!==o&&o,i=i.clean,i=void 0!==i&&i,s=e.length,l=[["useless-files-webpack-plugin success"],["%s %d %s ","useless-files-clean-webpack-plugin find ",s,"useless files"]],e=(s&&(e.forEach(function(e){l.push(["- "+e])}),i)&&l.push(["%s","delete "+s+" useless files success "]),l.push(["useless-files-webpack-plugin success"]),{console:(n=function(e){var n=e.shift(),i=e.pop();console.group.apply(console,n),e.forEach(function(e){return console.log.apply(console,e)}),console.groupEnd.apply(console,i)},r.toString=function(){return n.toString()},r),file:function(e){e=e.map(function(e){return 1<e.length&&e.shift(),e.join(" ")}).join("\r\n");fs.writeFileSync(path.join(t,"log.txt"),e,"utf-8")}});function r(e){return n.apply(this,arguments)}o&&(i=e[o])&&"function"==typeof i&&i(l)}},{key:"doneFile",value:function(){var e=this.depFileList,n=this.options,i=n.out,n=(n.log,n.clean),n=void 0!==n&&n,t=this.findAllFile(),o=this.findUnUsedFileList(e,t);"log"!=i&&(fs.writeFileSync(path.join(i,"allFileList.json"),JSON.stringify(t,null,4),"utf-8"),fs.writeFileSync(path.join(i,"depFileList.json"),JSON.stringify(e,null,4),"utf-8"),fs.writeFileSync(path.join(i,"unUsedFileList.json"),JSON.stringify(o,null,4),"utf-8")),n&&this.delete(o),this.log(o)}}]),n}();