Table of Contents
Page 2 of 6

Eleventy Base Blog

Add dist/ and temp/ to .gitignore

dist/
temp/

The starter ignores _site/, which is the only output directory it knows about. Baseline's output is dist/, so until you do this every build is stageable. Nothing warns you. Do it before anything can generate output rather than at the point the output moves.

temp/ is where the old config goes when you park it, along with anything else you want out of the way while you work. Parked files are working material, not deliverable.

Install Baseline

npm install @apleasantview/eleventy-plugin-baseline@0.1.0-next.45 --save-exact

Pin exactly, no caret. This is a fast-moving prerelease line, and you want version changes to be deliberate commits rather than silent lockfile drift.

Then two helpers for the scripts in the next step:

npm install --save-dev rimraf npm-run-all

rimraf empties the output directory, npm-run-all chains the scripts together. cross-env is already a dependency of the starter, so it needs nothing.

Rewrite the scripts

"start": "npm-run-all clean dev",
"clean": "rimraf dist/",
"dev": "eleventy --serve",
"build:eleventy": "cross-env ELEVENTY_ENV=production eleventy",
"build": "npm-run-all clean build:*",
"dryrun": "eleventy --dryrun"

clean earns its keep from the first build onwards. Stale output in dist/ is a convincing liar. There is a brief inconsistency here: until you rewrite the config the output directory is still _site/, so clean is deleting a directory nothing writes to yet.

Call the binary directly rather than through npx. It is on node_modules/.bin inside a script either way, and npx breaks under pnpm.

Keep debug, debugstart and benchmark if you use them. They are orthogonal to Baseline.

Bump engines.node to >=22 while you are in package.json. Advertising 18 is a promise the project can no longer keep.

No .env. Development falls back to localhost in the settings file you write on the next page, and production takes BASELINE_URL from your host's environment. Nothing in the starter or the plugin loads a .env file, so adding one means adding a loader for no gain. Deployment checks covers the route through a .env if you would rather have one, including where the import has to live.

The project is ready and the site still builds exactly as it did. The next page is where that stops being true.