使用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>
### 在配置文件中引用
```javascript
const FilterImg = require('./filterImg')
plugins: [
new FilterImg()
]
删除文件:直接用node运行
// remove.js
const 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)
}