Build more, configure less

Neues JavaScript Framework von Uber: Vorhang auf für Fusion.js!
Keine Kommentare

Build more, configure less – unter diesem Motto hat Uber das neue JavaScript-Framework Fusion.js vorgestellt. Ein Plug-in basiertes, universelles Webframework, soll es sein. Open Source selbstredend. Was steckt dahinter?

Fusion.js wurde laut Uber-Blog zunächst intern entwickelt, um das bisher eingesetzte monolithische Webframework zu ersetzen. Dabei sollten gängige Webtechnologien wie React und Redux weiterhin unterstützt und gleichzeitig Ubers App Health-Monitoring-Infrastruktur genutzt werden können.

Zu den Eckdaten des Frameworks gehören Hot Reloading von Modulen, Daten-erhaltendes Server-seitiges Rendering und Unterstützung für Bundle Splitting.

Fusion.js Steckbrief

Das „universelle“ an Fusion.js-Anwendungen besteht darin, dass sie über ein einziges Entrypoint-File verfügen und Code sowohl auf dem Server als auch im Browser wiederverwendet werden kann. Plug-ins haben via Middleware Zugriff auf den HTTP Request-Lebenszyklus und können auch den React-Tree verändern, um etwa Provider-spezifische Komponenten hinzuzufügen.

Libraries sollen durch diese Technik mit einer einzigen Codezeile installiert werden können. Dabei spielt es keine Rolle, wie viele Integrationspunkte die Library benötigt, wie im unteren Beispiel von der Fusion.js-Projektseite zu sehen:

import App from 'fusion-react';
import Router from 'fusion-plugin-react-router';

const root = 

<div>...</div>


;

export default () => {
  const app = new App(root);

  /*
  One line of code sets up everything you need for routing:
  - Server rendering
  - React Providers on both server and browser
  - Bundle splitting integration
  - HMR integration
  - Metadata hydration
  */
  app.register(Router);

  return app;
}

Darüber hinaus nutzen Plug-ins Dependency Injection, um beispielsweise anderen Plug-ins definierte Schnittstellen (APIs) als Services zur Verfügung zu stellen. Typensicherheit zwischen Dependencies kann optional via Flow.js hergestellt werden:

Typisierung in Fusion.js via Flow.js, Quelle: www.eng.uber.com/fusionjs/

Ein weiterer Fokus liegt auf der Testbarkeit von Webanwendungen. Fusion.js unterstützt aktuelle Testwerkzeuge wie JestEnzyme und Puppeteer. Außerdem stehen Tools für das Testen von Plug-ins zur Verfügung. Das Package fusion-test-utils erlaubt beispielsweise die Simulation eines Servers, um etwa Integrationstests zwischen verschiedenen Plug-ins und Mocks zu fahren.

Fusion.js ausprobieren

Fusion.js ist bei Uber bereits aktiv im Einsatz. Dennoch steht das Framework noch am Anfang. Leo Horie vom Uber-Blog kommentiert:

Within Uber, there are already more than 60 repositories using Fusion.js since its internal release. We expect this number to increase rapidly due to a combination of new web projects and automated migration of older projects to Fusion.js. Given this demand, improvements at the framework level should significantly improve the software quality baseline for these projects.

Auf der Roadmap für zukünftige Fusion.js-Versionen stehen Performance-Optimierungen, eine Erweiterung des Test-Toolings sowie ein besserer Flow-Support. Fusion.js steht unter der quelloffenen MIT-Lizenz. Details zum Framework finden sich auf der Projektseite www.fusionjs.com sowie auf GitHub.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -