Order of operations

What does Lume do to build your site?

This is a high-level description of how Lume builds your site. When you run lume, the following operations are executed in this order:

  1. Dispatch the beforeBuild event.
  2. Ensure the dest folder is empty (unless emptyDest is disabled).
  3. Walk the src folder recursively and build a tree with all files and folders. Any remote files are added here.
  4. Dispatch the afterLoad event.
  5. Walk the tree recursively and load all files matching with a valid file extension, like .md, .vto, etc.
    • Skip files and folders starting with _, ., or ignored with site.ignore().
    • If the file must be copied statically, calculate the source and destination paths.
    • If the name of the file is _data or is inside a _data folder, it is shared data.
    • If the file is inside a _components folder, it is a component.
    • If it has a known extension, it's a page.
    • Otherwise, ignore it (or copy it if copyRemainingFiles is enabled).
  6. Dispatch the beforeRender event.
  7. Group all pages by renderOrder value and sort them.
  8. For each group of pages with the same renderOrder:
  9. Dispatch the afterRender event.
  10. Run registered processors.
  11. Dispatch the beforeSave event.
  12. Save all pages to the dest folder.
  13. Dispatch the afterBuild event.

Watch mode

In watch mode (with lume --serve or lume --watch), the first build is exactly the same, but any following changes have some differences:

  • The dest folder is not emptied.
  • Only files with changes are reloaded.
  • Steps 4 to 10 are exactly the same. All pages (not just the modified ones) are re-rendered, because a change in one file can affect many pages, so we have to render all pages again. See scoped updates to learn how to configure this.
  • All pages that have changed are saved to dest.