createHtml.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import esbuild from "esbuild";
  2. import htmlMinifier from "html-minifier-terser";
  3. import fsSync from "fs";
  4. const fs = fsSync.promises;
  5. const esbuildProm = esbuild.build({
  6. entryPoints: [`./index.js`, `./index.css`],
  7. bundle: true,
  8. minify: true,
  9. sourcemap: false,
  10. write: false,
  11. outdir: `.`
  12. });
  13. const htmlProm = fs.readFile(`${import.meta.dirname}/index.html`, "utf-8");
  14. const [build, html] = await Promise.all([esbuildProm, htmlProm]);
  15. let js, css;
  16. for(let i = 0; i < build.outputFiles.length; i++){
  17. if(build.outputFiles[i].path.endsWith(".js")){
  18. js = build.outputFiles[i].text;
  19. }else if(build.outputFiles[i].path.endsWith(".css")){
  20. css = build.outputFiles[i].text;
  21. }
  22. }
  23. let data = await htmlMinifier.minify(html, {
  24. collapseBooleanAttributes: true,
  25. collapseInlineTagWhitespace: true,
  26. collapseWhitespace: true,
  27. conservativeCollapse: true,
  28. decodeEntities: true,
  29. noNewlinesBeforeTagClose: true,
  30. removeComments: true
  31. });
  32. data = data.replace('<script></script>', `<script>${js}</script>`);
  33. data = data.replace('<style></style>', `<style>${css}</style>`);
  34. fs.writeFile(`${import.meta.dirname}/build.html`, data);