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 event beforeBuild.
  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. The files loaded remotely are also added.
  4. Dispatch the event afterLoad.
  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, 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 event beforeRender.
  7. Group all pages by renderOrder value and sort them.
  8. For each group of pages with the same renderOrder:
  9. Dispatch the event afterRender.
  10. Run the processors registered
  11. Dispatch the event beforeSave.
  12. Save all pages to dest folder.
  13. Dispatch the event afterBuild.

Watch mode

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

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