wc-compiler
Version:
Experimental native Web Components compiler.
86 lines (65 loc) • 3.32 kB
Markdown
<img src="https://merry-caramel-524e61.netlify.app/assets/wcc-logo.png" width="30%"/>
# Web Components Compiler (WCC)
[](https://app.netlify.com/sites/merry-caramel-524e61/deploys)
[](https://github.com/ProjectEvergreen/wcc/tags)
[](https://raw.githubusercontent.com/ProjectEvergreen/wcc/master/LICENSE.md)
[](https://nodejs.org/en/about/previous-releases")
[](https://www.greenwoodjs.dev/discord/)
> _Experimental Web Components compiler. It's Web Components all the way down!_ 🐢
## How It Works
1. Write a Web Component
```js
const template = document.createElement('template');
template.innerHTML = `
<style>
.footer {
color: white;
background-color: #192a27;
}
</style>
<footer class="footer">
<h4>My Blog © ${new Date().getFullYear()}</h4>
</footer>
`;
class Footer extends HTMLElement {
connectedCallback() {
if (!this.shadowRoot) {
this.attachShadow({ mode: 'open' });
this.shadowRoot.appendChild(template.content.cloneNode(true));
}
}
}
export default Footer;
customElements.define('wcc-footer', Footer);
```
1. Run it through the compiler
```js
import { renderToString } from 'wc-compiler';
const { html } = await renderToString(new URL('./path/to/component.js', import.meta.url));
```
1. Get HTML!
```html
<wcc-footer>
<template shadowrootmode="open">
<style>
.footer {
color: white;
background-color: #192a27;
}
</style>
<footer class="footer">
<h4>My Blog © 2022</h4>
</footer>
</template>
</wcc-footer>
```
## Installation
**WCC** runs on NodeJS and can be installed from npm.
```shell
$ npm install wc-compiler --save-dev
```
## Documentation
See our [website](https://merry-caramel-524e61.netlify.app/) for API docs and examples.
## Motivation
**WCC** is not a static site generator, framework or bundler. It is designed with the intent of being able to produce raw HTML from standards compliant Web Components and easily integrated _into_ a site generator or framework, like [**Greenwood**](https://www.greenwoodjs.dev). The Project Evergreen team also maintains similar integrations for [**Eleventy**](https://github.com/ProjectEvergreen/eleventy-plugin-wcc/) and [Astro](https://github.com/ProjectEvergreen/astro-wcc).
In addition, **WCC** hopes to provide a surface area to explore patterns around [streaming](https://github.com/ProjectEvergreen/wcc/issues/5), [serverless and edge rendering](https://github.com/thescientist13/web-components-at-the-edge), and as acting as a test bed for the [Web Components Community Groups](https://github.com/webcomponents-cg)'s discussions around community protocols, like [hydration](https://github.com/ProjectEvergreen/wcc/issues/3).