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 load all files matching with a valid file extension, like .md, .njk, 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 inside a _components folder, is a component.
    • If it has a known extension, it's a page.
    • Otherwise, ignore it.
  4. Dispatch the event beforeRender.
  5. Group all pages by renderOrder value and sort them.
  6. For each group of pages with the same renderOrder:
  7. Dispatch the event afterRender.
  8. Run the processors registered
  9. Dispatch the event beforeSave.
  10. Save all pages to dest folder.
  11. 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 8 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.
  • Only the pages that have changed their content are saved in dest.