使用webpack plugin(webpack 3)
- 遍历得到图片文件名
- 把用到的文件放入对象中,属性值设置为true
- 读取文件,并删除掉 ```javascript function MyPlugin() {} var fs = require(‘fs’); var path = require(‘path’);
function readFileList(dir, filesList = []) { const files = fs.readdirSync(dir); files.forEach((item, index) => { var fullPath = path.join(dir, item); const stat = fs.statSync(fullPath); if (stat.isDirectory()) { readFileList(path.join(dir, item), filesList); //递归读取文件 } else { filesList.push(item); } }); return filesList; }
var filesList = []; var obj = {} readFileList(path.resolve(__dirname, ‘../src/assets/img’), filesList); MyPlugin.prototype.apply = function (compiler) { compiler.plugin(‘emit’, function (compilation, callback) { for (let file of filesList) { obj[file] = false }
compilation.chunks.forEach(function (chunk) {chunk.files.forEach(function (filename) {// Get the asset source for each file generated by the chunk:var source = compilation.assets[filename].source();for (let file of filesList) {if (source.includes(file)) {obj[file] = true}}fs.writeFileSync('write.txt', JSON.stringify(obj))});});callback();
}); };
module.exports = MyPlugin;
<a name="ceMYP"></a>### 在配置文件中引用```javascriptconst FilterImg = require('./filterImg')plugins: [new FilterImg()]
删除文件:直接用node运行
// remove.jsconst fs = require('fs')const path = require('path')function removefile(dir, filesList = []) {const files = fs.readdirSync(dir);files.forEach((item, index) => {var fullPath = path.join(dir, item);const stat = fs.statSync(fullPath);if (stat.isDirectory()) {removefile(path.join(dir, item), filesList); //递归读取文件} else {if (!filesList[item] && item !== '.DS_Store') {fs.unlinkSync(fullPath);}}});}try {const data = fs.readFileSync(path.join(__dirname, 'write.txt'), 'utf8')removefile(path.resolve(__dirname, './src/assets/img'), JSON.parse(data))} catch (err) {console.error(err)}
