使用webpack plugin(webpack 3)

  1. 遍历得到图片文件名
  2. 把用到的文件放入对象中,属性值设置为true
  3. 读取文件,并删除掉 ```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 }

  1. compilation.chunks.forEach(function (chunk) {
  2. chunk.files.forEach(function (filename) {
  3. // Get the asset source for each file generated by the chunk:
  4. var source = compilation.assets[filename].source();
  5. for (let file of filesList) {
  6. if (source.includes(file)) {
  7. obj[file] = true
  8. }
  9. }
  10. fs.writeFileSync('write.txt', JSON.stringify(obj))
  11. });
  12. });
  13. callback();

}); };

module.exports = MyPlugin;

  1. <a name="ceMYP"></a>
  2. ### 在配置文件中引用
  3. ```javascript
  4. const FilterImg = require('./filterImg')
  5. plugins: [
  6. new FilterImg()
  7. ]

删除文件:直接用node运行

  1. // remove.js
  2. const fs = require('fs')
  3. const path = require('path')
  4. function removefile(dir, filesList = []) {
  5. const files = fs.readdirSync(dir);
  6. files.forEach((item, index) => {
  7. var fullPath = path.join(dir, item);
  8. const stat = fs.statSync(fullPath);
  9. if (stat.isDirectory()) {
  10. removefile(path.join(dir, item), filesList); //递归读取文件
  11. } else {
  12. if (!filesList[item] && item !== '.DS_Store') {
  13. fs.unlinkSync(fullPath);
  14. }
  15. }
  16. });
  17. }
  18. try {
  19. const data = fs.readFileSync(path.join(__dirname, 'write.txt'), 'utf8')
  20. removefile(path.resolve(__dirname, './src/assets/img'), JSON.parse(data))
  21. } catch (err) {
  22. console.error(err)
  23. }