build-watcher.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. const chokidar = require("chokidar");
  2. const Grapefruit = require("grapefruit");
  3. const careless = require("careless-fs");
  4. const buildPipeline = require("./build-pipeline");
  5. const fs = require("fs");
  6. const logfilePath = "./last-build.log";
  7. const log = fs.createWriteStream(logfilePath, { flags: "w" });
  8. const runner = new Grapefruit({
  9. emitter: event => {
  10. log.write(JSON.stringify(event, null, 2));
  11. log.write("\n");
  12. },
  13. funcs: {
  14. listDirectory: require("./funcs/listDirectory.js"),
  15. imageMin: require("./funcs/imageMin.js"),
  16. decorateFileObject: require("./funcs/decorateFileObject.js"),
  17. readInFile: require("./funcs/readInFile.js"),
  18. copyFileTo: require("./funcs/copyFileTo.js"),
  19. minifyHtml: require("./funcs/minifyHtml.js"),
  20. minifyJS: require("./funcs/minifyJS.js"),
  21. writeOutFile: require("./funcs/writeOutFile.js"),
  22. compileTemplates: require("./funcs/compileTemplates.js"),
  23. renderTemplate: require("./funcs/renderTemplate.js"),
  24. markdownToHtml: require("./funcs/markdownToHtml.js"),
  25. parseJson: require("./funcs/parseJson.js"),
  26. rmrf: require("./funcs/rmrf.js"),
  27. gitAdded: require("./funcs/gitAdded.js"),
  28. copy: require("./funcs/copy.js")
  29. }
  30. });
  31. async function build() {
  32. const pipeline = runner.runPipeline(buildPipeline);
  33. pipeline
  34. .then(function(res) {
  35. console.log("Pipeline complete.");
  36. console.log(`History written to ${logfilePath}`);
  37. return res;
  38. })
  39. .catch(function(err) {
  40. console.log(
  41. "Pipeline error:",
  42. err.message
  43. ? JSON.stringify(err.message, null, 2)
  44. : JSON.stringify(err, null, 2)
  45. );
  46. console.log(`History written to ${logfilePath}`);
  47. return err;
  48. });
  49. }
  50. build();
  51. const watcher = chokidar.watch("./content", {
  52. ignored: /[\/\\]\./,
  53. persistent: true,
  54. ignoreInitial: true,
  55. followSymlinks: true,
  56. cwd: ".",
  57. disableGlobbing: false,
  58. usePolling: false,
  59. interval: 100,
  60. binaryInterval: 300,
  61. alwaysStat: false,
  62. depth: 99,
  63. awaitWriteFinish: {
  64. stabilityThreshold: 2000,
  65. pollInterval: 100
  66. }
  67. });
  68. watcher.on("all", function(event) {
  69. build();
  70. });