From a1d247fcf295d7c4f1958d842d19ef3ab7701422 Mon Sep 17 00:00:00 2001 From: Owen Buckley Date: Wed, 8 Nov 2023 10:14:46 -0500 Subject: [PATCH] content/v0.29.0 release blog post (#1174) * release v0.29.0 blog post * add MDN links to URL and import.meta.url * add whats next section content * fix markdown snippet linting * minor grammar and phrasing revisions * PR feedback and revisions * final revisions * feature callouts and embed video example * final nits and grammar --- www/assets/serverless.webp | Bin 0 -> 32786 bytes www/pages/blog/index.md | 1 + www/pages/blog/release/v0-29-0.md | 116 ++++++++++++++++++++++++++++++ www/pages/docs/css-and-images.md | 2 +- 4 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 www/assets/serverless.webp create mode 100644 www/pages/blog/release/v0-29-0.md diff --git a/www/assets/serverless.webp b/www/assets/serverless.webp new file mode 100644 index 0000000000000000000000000000000000000000..7ec47d81532f40830cae62934ffed22cd00cc168 GIT binary patch literal 32786 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 Q9~SjJ{v~Qa1p@Ma071) + +## What's New + +The Greenwood team is back with a new release and we're excited to share with you what we've been up to. From this latest release, here are three features we'd like to highlight: + +1. Serverless Adapters (Netlify, Vercel) +1. Web Server Components +1. Static Asset Bundling + +Let's check them out! 👇 + +### Serverless Adapters + +The simplicity of serverless hosting can be a great advantage in achieving dynamic with the ease of static. As part of this release, the Greenwood team has now made it so that you can easily adapt a Greenwood project's SSR pages or API endpoints to run on [**Netlify**](https://www.netlify.com/) and [**Vercel**](https://vercel.com/) serverless hosting. + +In the demo video below, you can see a mix of static (HTML) pages and templates rendering alongside purely SSR pages and API endpoints, all running on serverless hosting. SSR pages and API endpoints are capable of server rendering real custom elements, meaning you can get **_full-stack Web Components_** with Greenwood! 🚀 + + + +It's as easy as installing and adding the plugin to your _greenwood.config.js_. +```js +// import { greenwoodPluginAdapterVercel } from '@greenwood/plugin-adapter-vercel'; +import { greenwoodPluginAdapterNetlify } from '@greenwood/plugin-adapter-netlify'; + +export default { + plugins: [ + greenwoodPluginAdapterNetlify() + ] +}; +``` + +Check out the README docs for our currently supported [**Netlify**](https://github.com/ProjectEvergreen/greenwood/tree/rmaster/packages/plugin-adapter-netlify) and [**Vercel**](https://github.com/ProjectEvergreen/greenwood/tree/rmaster/packages/plugin-adapter-vercel) plugins, and keep your eyes out for future plugins as we look to land support for [**AWS**](https://github.com/ProjectEvergreen/greenwood/issues/1142) and [**Cloudflare**](https://github.com/ProjectEvergreen/greenwood/issues/1143). 👀 + +> _You can check out our showcase repos for each platform [here](https://github.com/ProjectEvergreen/greenwood-demo-adapter-netlify) and [here](https://github.com/ProjectEvergreen/greenwood-demo-adapter-vercel)._ + + +### Web Server Components + +Although [Custom Elements as pages](/blog/release/v0-26-0/#custom-elements-as-pages) are not a new feature, as Greenwood continues to enhance its capabilities on the backend, hooking these pages into the request / response lifecycle was an obvious need, and so we are now "promoting" these custom elements to a new name; _Web Server Components_. ✨ + +The API is still the same and continues to run only on the server, except now Greenwood will provide the `Request` object for the incoming request as a ["constructor prop"](/docs/server-rendering/#data-loading), allowing dynamic request time handling to occur within the custom element. + +```js +export default class PostPage extends HTMLElement { + constructor(request) { + super(); + + const params = new URLSearchParams(request.url.slice(request.url.indexOf('?'))); + this.postId = params.get('id'); + } + + async connectedCallback() { + const { postId } = this; + const post = await fetch(`https://jsonplaceholder.typicode.com/posts/${postId}`).then(resp => resp.json()); + const { title, body } = post; + + this.innerHTML = ` +

${title}

+

${body}

+ `; + } +} +``` + +> _We plan to continue [building on this concept for response handling](https://github.com/ProjectEvergreen/greenwood/issues/1177) and fleshing out Greenwood's capabilities through features like [dynamic routing](https://github.com/ProjectEvergreen/greenwood/issues/882) and [hydration](https://github.com/ProjectEvergreen/greenwood/issues/880)._ + + +### Static Asset Bundling + +As an alternative to the pre-defined [_assets/_ directory](/docs/css-and-images/), Greenwood now handles static asset "bundling" when referencing resources like images in your JavaScript. Through a combination of [`new URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) and [`import.meta.url`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta), your resource can now be located anywhere in your project's workspace. + +For production builds, Greenwood will generate a unique filename for the asset as well, e.g. _logo-83bc009f.svg_. 💯 + +```js +const logo = new URL('../path/to/images/logo.svg', import.meta.url); + +class Header extends HTMLElement { + connectedCallback() { + this.innerHTML = ` +
+

Welcome to My Site

+ + My logo +
+ `; + } +} + +customElements.define('app-header', Header); +``` + +> _We are looking to improve the developer experience around this pattern so please feel free to follow along or comment in this [GitHub issue](https://github.com/ProjectEvergreen/greenwood/issues/1163)._ + +## What's Next + +We're really excited to see the progress **Greenwood** has been able to make this year, and are looking forward to seeing where the community can take it. As we get closer to finalizing our [1.0 Roadmap](https://github.com/ProjectEvergreen/greenwood/milestone/3), we've been playing around with more ecosystem projects and making little demos to share with you all. We encourage you to check them out to see what Greenwood is capable of and help us push the boundaries of the _**full-stack web**_! 🙌 + +- [Server rendering custom elements with WCC on Vercel Serverless functions using htmx](https://github.com/thescientist13/greenwood-htmx) +- [Rendering Lit+SSR on Vercel Serverless functions](https://github.com/thescientist13/greenwood-demo-adapter-vercel-lit) + +We're also planning a significant [redesign of the Greenwood website](https://github.com/ProjectEvergreen/greenwood/issues/978) to help better showcase all of Greenwood's capabilities and to streamline and simplify the documentation. + +So stay tuned, join our [Slack](https://join.slack.com/t/thegreenhouseio/shared_invite/enQtMzcyMzE2Mjk1MjgwLTU5YmM1MDJiMTg0ODk4MjA4NzUwNWFmZmMxNDY5MTcwM2I0MjYxN2VhOTEwNDU2YWQwOWQzZmY1YzY4MWRlOGI) or [Discord](https://discord.gg/pFbynPar) communities to be part of the conversation, and we look forward to seeing you for the next release. ✌️ \ No newline at end of file diff --git a/www/pages/docs/css-and-images.md b/www/pages/docs/css-and-images.md index 893c01557..6b0d5d310 100644 --- a/www/pages/docs/css-and-images.md +++ b/www/pages/docs/css-and-images.md @@ -61,7 +61,7 @@ You can do the same in your HTML ``` -In your JavaScript, you can also use a combination of `new URL` and `import.meta.url` which means you can put the file anywhere in your project, not just the _assets/_ directory and it will be resolved automatically! For production builds, Greenwood will generate a unique filename for the asset as well, e.g. _logo-83bc009f.svg_. +In your JavaScript, you can also use a combination of [`new URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) and [`import.meta.url`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import.meta) which means you can put the file anywhere in your project, not just the _assets/_ directory and it will be resolved automatically! For production builds, Greenwood will generate a unique filename for the asset as well, e.g. _logo-83bc009f.svg_. > _We are looking to improve the developer experience around using `new URL` + `import.meta.url` as part of an overall isomorphic asset bundling strategy. You can visit this [GitHub issue](https://github.com/ProjectEvergreen/greenwood/issues/1163) to follow along._