In Zeile 6 sehen wir die Einbindung der bundle.js im script-Tag. Das Besondere zeigt die Zeile 11. Hier verwenden wir die Kuba-Komponente als wäre sie ein existierendes HTML Tag.
Schauen wir uns die Datei nun über den Browser an, der auf den Python-Webserver zugreift an, sehen wir, dass auch funktioniert:
python -m SimpleHTTPServer
// im browser unter
http://localhost:8000
dist-custom-elements-bundle
Nach dem build-Befehl entsteht ein Ordner unter /dist/custom-elements mit jeweils einer index.ts-Datei und der dazugehörigen index.d.ts-Datei. Diesmal sind alle gebauten Komponenten in der Datei gepackt. Aber auch hier bitte ich um Vorsicht. Es ist für Frameworks, bzw. für das moderne JS optimiert und läuft nicht out-of-the-box im Browser. Wir müssen auch hier erst einmal mit Hilfe von Webpack ein browserfähiges Bundle bauen.
Wir kopieren den Inhalt des Ordners in unser neues Projekt.
Auch hier brauchen wir ein Einstiegsdatei:
// custom-elements/bundler.js
import { defineCustomElements } from "./index";
defineCustomElements();
und die dazugehörige Webpack-Config mitsamt package.json Skriptbefehl:
// webpack.component.config
const path = require("path");
module.exports = {
entry: "./custom-elements/bundler.js", // Entry File
output: {
path: path.resolve(__dirname, "dist"), //Output Directory
filename: "custom-elements/bundle.js", //Output file
},
};
// package.json script
"build_custom_elements": "webpack --mode production --config=webpack.custom-elements.config.js",
Wenn wir diesen Befehl ausführen erhalten wir unter /dist/custom-elements eine bundle.js. Diese referenzieren nun in unserem neuen HTML-Skeleton.
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<meta charset="utf-8" />
<title>Mein HTML Projekt</title>
<script src="./dist/custom-elements/bundle.js"></script>
</head>
<body>
<h1>Hello Welt custom-elements</h1>
<my-component
first="Stencil"
last="'Don't call me a framework' JS"
></my-component>
<kuba-button>Hello</kuba-button>
</body>
</html>
Analog zu dem vorherigen Beispiel sieht man in Zeile 7 die Einbindung und ab Zeile 11 die Verwendung der "neuen" HTML-Tags.
www build
Nach dem build-Befehl hat man einen Ordner www. Diesen kopieren wir in das neue Projekt. Hier ist schon alles fertig transpiliert. Es ist lauffähig im Browser. Wir benötigen nur einen neuen HTML-Skeleton:
<!DOCTYPE html>
<html dir="ltr" lang="en">
<head>
<meta charset="utf-8" />
<title>WWW</title>
<script type="module" src="www/build/component-lib.esm.js"></script>
<script nomodule src="www/build/component-lib.js"></script>
</head>
<body>
<h1>Hello Welt</h1>
<my-component
first="Stencil"
last="'Don't call me a framework' JS"
></my-component>
<kuba-button>Hello</kuba-button>
</body>
</html>
In Zeile 7 und 8 sieht man die Einbindung. Danach hat man Zugriff auf seinen Komponentenkatalog (Zeile 11-14). Die Darstellung im Browser ist Analog zu Bild 2.
In diesem Artikel habe ich gezeigt wie man seine eigene Komponentenbibliothek ausliefert und integriert anhand der verschiedenem Builds von StencilJS. Ab jetzt sollte jeder in der Lage sein das Projekt nachzustellen. Vielleicht habe ich die Lust geweckt auf so eine Komponentenbibliothek zu setzen. Wir haben damit bereits sehr gute Erfahrungen gesammelt und folgen diesem Pattern sehr gerne. Ich finde es ist eine tolle Technologie und Methodik.
Der Code liegt wie immer auf Github.
Ihr habt Fragen oder Anregungen? Schreibt mir bei Twitter.
Tausend Dank fürs Lesen!
Kuba