You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

60 line
1.7 KiB

  1. const fs = require("fs");
  2. const path = require("path");
  3. const { sites_path } = require("./utils");
  4. module.exports = {
  5. name: "xhiveframework-vue-style",
  6. setup(build) {
  7. build.initialOptions.write = false;
  8. build.onEnd((result) => {
  9. let files = get_files(result.metafile.outputs);
  10. let keys = Object.keys(files);
  11. for (let out of result.outputFiles) {
  12. let asset_path = "/" + path.relative(sites_path, out.path);
  13. let dir = path.dirname(out.path);
  14. if (out.path.endsWith(".js") && keys.includes(asset_path)) {
  15. let name = out.path.split(".bundle.")[0];
  16. name = path.basename(name);
  17. let index = result.outputFiles.findIndex((f) => {
  18. return f.path.endsWith(".css") && f.path.includes(`/${name}.bundle.`);
  19. });
  20. let css_data = JSON.stringify(result.outputFiles[index].text);
  21. let modified = `xhiveframework.dom.set_style(${css_data});\n${out.text}`;
  22. out.contents = Buffer.from(modified);
  23. result.outputFiles.splice(index, 1);
  24. if (result.outputFiles[index - 1].path.endsWith(".css.map")) {
  25. result.outputFiles.splice(index - 1, 1);
  26. }
  27. }
  28. if (!fs.existsSync(dir)) {
  29. fs.mkdirSync(dir, { recursive: true });
  30. }
  31. fs.writeFile(out.path, out.contents, (err) => {
  32. err && console.error(err);
  33. });
  34. }
  35. });
  36. },
  37. };
  38. function get_files(files) {
  39. let result = {};
  40. for (let file in files) {
  41. let info = files[file];
  42. let asset_path = "/" + path.relative(sites_path, file);
  43. if (info && info.entryPoint && Object.keys(info.inputs).length !== 0) {
  44. for (let input in info.inputs) {
  45. if (input.includes(".vue?type=style")) {
  46. let bundle_css = path.basename(info.entryPoint).replace(".js", ".css");
  47. result[asset_path] = bundle_css;
  48. break;
  49. }
  50. }
  51. }
  52. }
  53. return result;
  54. }