Skip to content

【练习--添加编译时的文件列表】

在webpack编译输出的文件中,添加一个filetxt.txt文件,文件内容是

文件名

文件大小

src/index.js和a.js

js
//a.js
module.exports = "module A";

//index.js
const A = require("./a");
console.log("我是入口文件");

plugins/FilePlugin.js

js
module.exports = class FilePlugin {
  constructor(filename = "file.txt") {
    this.filename = filename;
  }

  apply(compiler) {
    console.log("我是fileplugin插件");
      //在最终生成文件的时候干预webpack
    compiler.hooks.emit.tap("FilePlugin", (compilation) => {
      console.log("emit的assets", compilation.assets);

      //将文件合并在一个数组
      let filelist = [];
      for (let key in compilation.assets) {
        let content = `【${key}】
size:${compilation.assets[key].size()}`;
        filelist.push(content);
      }

      //添加文件
      let str = filelist.join("\n\n");
      compilation.assets[this.filename] = {
          //source是文件输出的内容
        source: function () {
          return str;
        },
          //size是文件的大小
        size: function () {
          return str.length;
        },
      };
    });
  }
};

webapck.config.js

js
const FilePlugin = require("./plugins/FilePlugin");

module.exports = {
  mode: "development",
  devtool: "source-map",
  plugins: [new FilePlugin("fileMd.txt")],
};

最终结果

dist文件夹下多出了fileMd.txt

md
【main.js】
size:4157

【main.js.map】
size:3835

MIT License