Updating to AstroJS 1x beta
When I originally implemented AstroJS on this site, it was on version 0.20.12
. Almost a year later, I wanted to update to the latest version before I started implementing bigger features.
Based on semantic versioning the jump from 0.20.12
to 1.0.0-beta.36
is pretty big. Thankfully, the upgrade process wasn’t too bad.
Differences
Configs had changed and my site wouldn’t run after upgrading. This was a bit of a surprise, but not unexpected. I headed over to the release changelogs found my version, 0.20.12
. From there I started working my way up to see if I could find anything that would help me debug.
Below are some changes I did to get this little site working again.
Simpler configs
Configs seemed to require less, that’s great! What I didn’t realize was part of making simpler configs was breaking up stuff that was previously built in. I now needed to import defineConfig
from astro/config
, pass my overrides, and export that.
// astro.config.mjs
- export default {
- …Your overrides
+ import { defineConfig } from "astro/config";
+
+ // https://astro.build/config
+ export default defineConfig({
+ …Your overrides
+ });
};
Sitemaps are also no longer built-in. That’s now a plugin that you need to install and load separately. That makes sense, why load something by default that you might not even use.
import { defineConfig } from "astro/config";
import sitemap from "@astrojs/sitemap";
// https://astro.build/config
export default defineConfig({
integrations: [sitemap()]
});
This website was originally a 1-page site, so there wasn’t much to it. Here’s a full diff of changes. You can see how much was no longer needed.
// astro.config.mjs
- export default {
- // projectRoot: '.', // Where to resolve all URLs relative to. Useful if you have a monorepo project.
- pages: './src/pages', // Path to Astro components, pages, and data
- dist: './dist', // When running `astro build`, path to final static output
- public: './public', // A folder of static files Astro will copy to the root. Useful for favicons, images, and other files that don’t need processing.
- buildOptions: {
- site: 'https://www.jmejia.com/', // Your public domain, e.g.: https://my-site.dev/. Used to generate sitemaps and canonical URLs.
- sitemap: true, // Generate sitemap (set to "false" to disable)
- },
- devOptions: {
- // port: 3000, // The port to run the dev server on.
- // tailwindConfig: '', // Path to tailwind.config.js if used, e.g. './tailwind.config.js'
- },
- renderers: ['@astrojs/renderer-preact'],
+ import { defineConfig } from "astro/config";
+ import sitemap from "@astrojs/sitemap";
+
+ // https://astro.build/config
+ export default defineConfig({
+ site: "https://www.jmejia.com/",
+ integrations: [sitemap()]
+ });
};
Fetching data
Data fetching in Portfolio examples also stopped working because that had changed as well. You now need to call an async function in Astro.glob
, instead of fetchContent
.
- const projectPreviews = Astro.fetchContent('./project/**/*.md');
+ const projectPreviews = await Astro.glob('./project/**/*.md');
Template changes
Once that I got rid of those initial npm start
errors, I ran into a few more because of required template changes.
Using data inside of HTML elements no longer required quotes.
- <a href="{ navItem.url }" class="nav__link">
+ <a href={ navItem.url } class="nav__link">
The site examples on the homepage are powered by markdown files that include basic information like the project title, my role, a brief description of the work involved, and a link to visit the site.
That stopped working because I now needed to reference the markdown file’s frontmatter.
- <h4 class="project__title">{ project.title }</h4>
- <ul class="project-roles h4 nav nav--inline">
- <li class="nav__item project-role">{ project.role }</li>
- </ul>
- <p>
- { project.description }
- </p>
- <a href={ project.cta }>
- Visit <span class="visually-hidden">{ project.title }</span> Site
- </a>
+ <h4 class="project__title">{ project.frontmatter.title }</h4>
+ <ul class="project-roles h4 nav nav--inline">
+ <li class="nav__item project-role">{ project.frontmatter.role }</li>
+ </ul>
+ <p>
+ { project.frontmatter.description }
+ </p>
+ <a href={ project.frontmatter.cta }>
+ Visit <span class="visually-hidden">{ project.frontmatter.title }</span> Site
+ </a>
These template updates weren’t the worst, but definitely wished for a migration guide. You can view the full list of changes in the pull request Upgrade to Astro 1x beta.