Was ist neu bei Vue.js 3?

Seit der Veröffentlichung von Vue.js 2 ist die Vue.js-Community schnell gewachsen und erhält von den Usern großartige Bewertungen. Neben Angular und React zählt es zu den beliebtesten JavaScript-Frameworks. Nun steht Vue.js 3 kurz vor der Veröffentlichung und hat in den letzten Monaten für einen ziemlichen Hype in der Welt der Webentwicklung gesorgt.

Verbesserungen

Die neue Version von Vue.js ist auf Geschwindigkeit ausgelegt. Obwohl Vue 2 schon relativ schnell war, hat Vue 3 eine bis zu 100% bessere Update-Leistung und bis zu 200% schnellere serverseitige Renderings. Auch die Komponenten-Initialisierung ist jetzt effizienter, sogar mit Compiler-informierten schnellen Pfaden zur Ausführung. Das virtuelle DOM wurde ebenfalls vollständig neu geschrieben und übertrifft in Sachen Geschwindigkeit seine alte Version deutlich.

Auch von der Größe her gibt es nun Verbesserungen. Vue 2 war mit einem Gewicht von etwa 20 kB gzipped bereits verdammt klein. Mit einer konstanten Gundliniengröße von < 10 kB gzipped wiegt Vue 3 nur noch halb so viel. Wie? Größtenteils durch Eliminieren nicht genutzter Bibliotheken (Tree Shaking). Wenn du also ein Element nicht verwendest, ist es nicht enthalten.

Vue 3 wird TypeScript unterstützen. Zusätzlich werden die Pakete entkoppelt, wodurch alles modularer und einfacher zu warten sein wird.

Das Erstellen nativer Anwendungen mit Vue ist gar nicht so schwierig, aber mit Vue 3 ist der Laufzeit-Kern plattformunabhängig, wodurch es noch einfacher wird, diese Technologie mit jeder Art von Plattform zu verwenden.

Wie du siehst, lohnt es sich mal anzuschauen, welche Neuerungen es bei Vue geben wird. Werfen wir nun einen Blick auf die wichtigsten Features von Vue 3.

Composition API

Bisher griffen wir beim Erstellen neuer Komponenten auf die Options API zurück. Diese API zwang uns, den Code der Komponente durch Optionen zu trennen, was bedeutete, dass wir alle reaktiven Daten an einer Stelle (Data), alle berechneten Eigenschaften an einer Stelle (Computed), alle Methoden an einer Stelle (Methods) usw. haben mussten.

Obwohl es zwar für kleinere Komponenten handlich und lesbar ist, wird es jedoch schmerzhaft, wenn die Komponente komplexer wird und mit mehreren Funktionalitäten zu tun hat. Gewöhnlich enthält die Logik, die sich auf eine bestimmte Funktionalität bezieht, einige reaktive Daten, berechnete Eigenschaften, eine Methode oder einige wenige davon; manchmal beinhaltet sie auch die Verwendung von Component-Lifecylcle-Hooks. Das führt dazu, dass man bei der Arbeit an einem einzigen logischen Anliegen ständig zwischen verschiedenen Optionen im Code hin- und herspringen muss.

Das andere Problem, auf das man bei der Arbeit mit Vue gestoßen sein könnte, ist die Frage, wie man eine gemeinsame Logik extrahieren kann, die von mehreren Komponenten wiederverwendet werden kann. Vue hat bereits wenige Optionen, um dies zu tun, aber alle haben ihre eigenen Nachteile (z.B. Mixins und Scoped-Slots).

Die Lösung von Vue 3 hierfür ist eine setup()-Methode, die es uns ermöglicht, die Kompositionssyntax zu verwenden. Jedes Stück Logik ist außerhalb dieser Methode als Kompositionsfunktion definiert.

Codebeispiel aus einem Color-Picking-Spiel unter Nutzung der Komposition API:

<script>
import Vue from "vue";
import ColorChoiceButton from "@/components/ColorChoiceButton";
import GameControlHeader from "@/components/GameControlHeader";
import { reactive } from "vue";
import { getRandomColor } from "@/utils/getRandomColor";
 
export default {
  components: {
    GameControlHeader,
    ColorChoiceButton
  },
  setup() {
    const score = reactive({
      lost: 0,
      won: 0
    });
 
    const colors = reactive({
      picked: "",
      right: "",
      choices: ["", "", ""]
    });
 
    function pickColor(color = "") {
      colors.picked = color;
      if (colors.picked === colors.right) {
        //round won
        score.won++;
      } else {
        //round lost
        score.lost++;
      }
    }
    function setFreshColors() {
      colors.choices[0] = getRandomColor();
      colors.choices[1] = getRandomColor();
      colors.choices[2] = getRandomColor();
 
      // we should detect the rare case that we get the same color twice and generate colors again
 
      const randomChoice = Math.round(Math.random() * 2);
      colors.right = colors.choices[randomChoice];
      colors.picked = "";
    }
    function resetGame() {
      score.won = 0;
      score.lost = 0;
      setFreshColors();
    } //new colors, score = 0
 
    resetGame();
 
    return { pickColor, resetGame, setFreshColors, score, colors };
  }
};
</script>

Kurz gesagt, es handelt sich lediglich nur um eine Funktion, die Properties und Funktionen an das Template zurückgibt. Wir deklarieren hier alle reaktiven Properties, computed Properties, Watchers und Lifecycle-Hooks und geben sie dann zurück, damit sie im Template verwendet werden können.

Die Composition API ist eine großartige Möglichkeit, Code lesbarer und wartbarer zu machen. Sie wird dazu beitragen, dass größere Vue-Projekte modularer und wiederverwendbarer sind; ein sehr vielversprechendes Zeichen für die entwicklerfreundlichen Änderungen, die das Vue-Team vornimmt. Es scheint, als hätten sie viele Schmerzpunkte der Entwicklerteams entdeckt und versucht, praktikable Lösungen anzubieten, ohne dabei extrem drastische Änderungen vorzunehmen.

Mehrere Root Elemente

In Vue 2 kann das Template-Tag nur ein Wurzelelement aufnehmen. Selbst wenn wir nur zwei <p>-Tags hätten, müssten wir sie in ein <div>-Tag einschließen, damit es funktioniert. Aus diesem Grund mussten wir auch den CSS-Code in der übergeordneten Komponente so ändern, dass er wie erwartet aussah.

In Vue 3 wird diese Einschränkung aufgehoben. Es wird kein Root-Element mehr benötigt.

Wir können eine beliebige Anzahl von Tags direkt innerhalb der Sektion <template></template> verwenden:

<template>
  <p> Count: {{ count }} </p>
  <button @click="increment"> Increment </button>
  <button @click="decrement"> Decrement</button>
</template>

Suspense

Suspense ist eine Komponente, die während des Lazy-Loadings benötigt wird, das im Wesentlichen dazu dient,  Lazy-Komponenten zu umhüllen. Mehrere Lazy-Komponenten können mit der Suspense-Komponente umwickelt werden. In der Version 3 von Vue JS wird Suspense eingeführt, um auf verschachtelte asynchrone Abhängigkeiten in einem verschachtelten Baum zu warten, und es funktioniert gut mit asynchronen Komponenten. Anstelle unserer Komponente wird ein Fallback-Content angezeigt, bis eine gewünschte Bedingung erfüllt ist. Die Bedingung ist in der Regel ein asynchroner Vorgang, der innerhalb unserer Komponenten-Setup-Funktion stattfindet.

Beispiel:

<Suspense>
  <template >
    <suspended-component />
  </template>
  <template #fallback>
    Loading...
  </template>
</Suspense>

Portals

Die <teleport to=”target”>-Komponente verschiebt alle Children zum ersten durch target beschriebenen Element im DOM-Tree. Dabei funktioniert target wie ein herkömmlicher Query-Selektor, das heißt, ein Element kann über die ID (#target), die Klasse (.target) oder den Tag-Namen (z.B. main) angewählt werden.

Mit Teleports können sich vor den Content stellende Elemente wie Modals, (Cookie) Banners, Pop Ups etc. von überall aus in der App aufgerufen werden, rendern aber stets an derselben Stellen im DOM-Tree.

App.vue

<Component>
  <teleport to="#target">
    <div>...</div>
  </teleport>
</Component>

index.html

<body>
  ...
  <div id="app"></div>
  <div id="portal-target"></div>
</body>

Multiple V-Models

Wenn du Vue verwendest, weißt du bereits, dass v-models für die bidirektionale Datenbindung von Vue-Komponenten verwendet werden. In Vue 2 erhältst du ein v-model für eine Komponente, aber in dieser neuen Version gibt es tolle Neuigkeiten!

Du kannst jetzt so viele v-model-Deklarationen und -Bindungen pro Komponente haben wie du willst und die einzelnen v-models auch benennen.

So etwas ist jetzt möglich:

<InviteeForm
   v-model:name="inviteeName"
   v-model:email="inviteeEmail"
/>

Global mounting/configuration API Änderung

Wir können eine weitere wichtige Änderung in der Art und Weise finden, wie wir unsere Anwendung instanziieren und konfigurieren. Derzeit verwenden wir das globale Vue-Objekt, um jede beliebige Konfiguration bereitzustellen und neue Vue-Instanzen zu erstellen. Jede am Vue-Objekt vorgenommene Änderung wirkt sich auf jede Vue-Instanz und Komponente aus.

Schauen wir uns nun an, wie es in Vue 3 funktionieren wird:

import { createApp } from 'vue'
import App from './App.vue'
 
const app = createApp(App)
 
app.config.ignoredElements = [/^app-/]
app.use(/* ... */)
app.mixin(/* ... */)
app.component(/* ... */)
app.directive(/* ... */)
 
app.mount('#app')

Fazit

Abgesehen von der Composition API, welche die größte neue API in Vue 3 ist, können wir auch eine Menge kleinerer Verbesserungen finden. Wir können sehen, dass sich Vue in Richtung einer besseren Erfahrung für Entwickler und einfachere, intuitivere APIs bewegt. Es ist auch großartig zu sehen, dass das Vue-Team beschlossen hat, viele Ideen, die derzeit nur über Bibliotheken von Drittanbietern verfügbar sind, in den Kern des Frameworks zu übernehmen.

How to: End-To-End-Testing mit Cypress

Jeder der mal mit komponentenbasiertem Programmieren angefangen hat, kennt die Situation. Man schreibt eine Komponente, die auf den ersten Blick funktioniert, dann aber beim Aufruf unerwartete Fehler aufweist. In der Entwicklungsphase ist dies ganz natürlich, aber wenn die Anwendung dem Kunden übergeben bzw. Endnutzer zur Verfügung gestellt wird und es zum Knall kommt, ist es katastrophal für die Reputation der eigenen Firma.

Jetzt sitzt du da und musst mehrere 1000 Elemente testen, die bei jeder Änderung sich gegenseitig beeinflussen. Testvorgänge mehrmals manuell auszuführen ist zeit- und nervenraubend.

Abhilfe schafft das End-to-End Test-Framework Cypress, welches speziell für das Testing von Web-Applikationen entwickelt wurde.

Das Besondere an Cypress ist, dass alles automatisiert abläuft. Manuelles hin her klicken gehört der Vergangenheit an, wenn das Testsetup ordentlich umgesetzt ist.

Eine ausführliche Featurebeschreibung könnt ihr unter: https://docs.cypress.io/guides/overview/why-cypress.html#Our-mission nachlesen

Mit Cypress starten

Cypress installieren

Zuallererst navigieren wir im Terminal in unseren Projektordner und installieren dort anschließend alle nötigen NPM Pakete:

$ cd/your/project/path

Mit npm:

$ npm install cypress --save-dev

Mit yarn:

$ yarn add cypress --dev

Cypress öffnen

Mit npm:

$ npx cypress open

Mit yarn:

$ yarn run cypress open

Cypress Benutzeroberfläche

Das Hauptmenü sollte in etwa so aussehen:

Wie du sehen kannst, liefert das Tool bereits viele fertig geschriebene Beispiele. Um zu prüfen, ob alles funktioniert, kannst du der Einfachheit halber auf ein Bespieltest klicken und es öffnet sich ein neues Fenster, wo der gewählte Test ausgeführt wird.

Der Test-Runner von Cypress öffnet sich und sollte in etwa so aussehen:

Die Ersten Schritte

In diesem Abschnitt werde ich euch eine kleine Zusammenfassung geben, was ihr für den Start wissen solltet.

1. Testdatei erstellen

  • Alle Test-Files kommen in dem Ordner: cypress/intergration
  • Namenkonvention: fileName_spec.js oder fileName.spec.js
  • describe(), it(), context() und specify() beinhalten die auszuführende Testbefehle und ihr könnt damit auch euer Test strukturieren und ein Name geben.

Dateistruktur an einem Bespiel:

// -- Start: Our Application Code --
function add (a, b) {
  return a + b
}
// -- End: Our Application Code --

// -- Start: Our Cypress Tests --
describe('Unit test our math functions', function() {
  context('math', function() {
    it('can add numbers', function() {
      expect(add(1, 2)).to.eq(3)
    })
})
// -- End: Our Cypress Tests --

2. Test schreiben

Sobald ihr die Test-File angelegt habt, aktualisiert Cypress automatisch die Testliste und euer Test sollte im Menü auswählbar sein.

In diesem Abschnitt werden die grundlegenden Funktionen gezeigt.

Test Website besuchen: cy.visit()

Diese Funktion überprüft den Link und gibt ein true zurück, falls ein 2XX Status wie 200 zurückkommt. Anderenfalls wird ein false zurückgegeben und der Test schlägt fehl.

describe('My First Test', function() {
  it('Test PHMU Website', function() {
    cy.visit('https://www.phmu.de/')
  })
})
  • Wie ihr sehen könnt werden die Befehle in dem Commando Log als Großbuchstaben angezeigt. Hier in unseren Beispiel VISIT.
  • Ein Klick darauf, wird das angesprochene Element in Funktion visuell angezeigt.
  • Alle Test werden als eine Timeline dargestellt und ihr könnt dadurch die Zeit “zurückspringen” und genau schauen, wann und wo der Test fehlgeschlagen hat.

Elemente abfragen

Im Cypress können wir ein Element aus unsere Test-Website abfragen und herauspicken (Query).

Die gängigen Funktionen dafür sind:

contains(content) – Gibt das DOM-Element zurück, dass den entsprechenden innerText enthält.

describe('My First Test', function() {
  it('Test PHMU Website', function() {
    cy.visit('https://www.phmu.de/')
  })
  it('Test contain PHMU slogan', function() {
    cy.contains('Unser Herz schlägt digital')
  })
})

get(selector) – Gibt das das DOM-Element zurück, dass mit dem Selektor ausgewählt wurde.

describe('My First Test', function() {
  it('Test PHMU Website', function() {
    cy.visit('https://www.phmu.de/')
  })
  it('Test contain PHMU slogan', function() {
    cy.get('img[class=image]')
    //Sucht ein img element mit der CSS-Klasse image
  })
})

Mit Elementen interagieren

Nachdem ihr im vorherigen Schritt die Elemente abgefragt haben, ist es auch möglich mit den Elementen zu interagieren. Falls eine Interaktion mit einem Element nicht möglich ist, wird der Test fehlgeschlagen.

type()

describe('My First Test', function() {
  it('Test contact formular', function() {
    cy.visit('https://www.phmu.de/workshops')
  })
  it('Test firstname input', function() {
    cy.get('input[id="firstname"]').type('Tung')
  })
})

click()

describe('My First Test', function() {
  it('Test contact formular', function() {
    cy.visit('https://www.phmu.de/workshops')
  })
  it('Test firstname input', function() {
    cy.get('button[id="submit"]').click()
  })
})

select()

describe('My First Test', function() {
  it('Test contact formular', function() {
    cy.visit('https://www.phmu.de/workshops')
  })
  it('Test firstname input', function() {
    cy.get('select[id="title"]').select("Doctor")
  })
})

Assertion

Mit should() kannst du überprüfen ob ein Element das ist, welches du erwartest. Als Beispiel möchten wir sicherstellen, dass die aktuelle URL die erwartete URL ist.

describe('My First Test', function() {
  it('Test PHMU Website', function() {
    cy.visit('https://www.phmu.de/')
  })
  it('Test workshop link', function() {
    cy.get(a[href="/workshop"]).click
    cy.url().should('include', '/workshop')
  })
})

In diesem Blog habe ich euch das nötigste mitgegeben, um euch auf Cypress aufmerksam zu machen. Es ist auch möglich Serveranfragen zu testen und zu validieren oder das Terminal auszulesen und nach Fehlern zu testen. Cypress ist sehr umfangreich und bietet viele Möglichkeit, sein Web-Interface auf Herz und Nieren zu testen..

Wie ich bereits erwähnt habe, empfehle ich euch wärmsten die Dokumentation. Diese beinhaltet neben der guten Dokumentation auch Best Practices für ein effektives Testing von Web-Applikation.

Links

Wie du Tailwind CSS im Vue.js-Projekt nutzen kannst

Du hast erfolgreich ein Vue-Projekt gestartet (wie das geht haben wir hier aufgeschrieben) und möchtest nun TailwindCSS als Utility-Framework zur Entwicklung nutzen? Dann zeigen wir dir im folgenden Beitrag, wie du das relativ einfach hin bekommst.

Zuerst musst du die notwendigen Packages installieren:

npm install tailwindcss autoprefixer
-- ODER --
yarn add tailwindcss autoprefixer

Dann kannst du mit dem folgenden Command das tailwindcss.config.js file in deinem Projekt erstellen:

npx tailwind init

Ist das erledigt, kannst du unter assets einen neuen Ordner /css erstellen und dort die Datei tailwind.css anlegen. Hier fügst du folgende Imports hinzu:

@tailwind base;
@tailwind components;
@tailwind utilities;

Nun müssen wir der Vue-App mitteilen, dass die CSS-Styles genutzt werden sollen. Dafür importieren wir unsere neue tailwind.css in die App.vue.

import Vue from 'vue';
import App from './App.vue';

import './assets/styles/tailwind.css';

Im letzten Schritt passen wir unser postcss.config.js an. So geben wir an, dass wir beide Plugins nutzen wollen.

module.exports = {
  plugins: [
    require('tailwindcss'),
    require('autoprefixer'),
  ]
}

Ist das erledigt, können wir prüfen, ob alles funktioniert. Füge am besten eine Tailwind-CSS-Klasse wie bg-red-500 einem div in App.vue hinzu und schaue ob du die Änderung nach dem Livereload siehst. Passt alles? Perfekt, dann hast du erfolgreich TailwindCSS zu deinem Projekt hinzugefügt.

Bundle-Größe optimieren

Tailwind vergrößert dein CSS immens. Wenn du also nun npm run build ausführst solltest du die Veränderung sehen. Über 679 KiB ist das CSS nun groß. Das bekommen wir jedoch relativ einfach reduziert.

File                                      Size             Gzipped

dist/js/chunk-vendors.9080b304.js         119.90 KiB       41.68 KiB
dist/js/app.d8b6098b.js                   7.19 KiB         2.58 KiB
dist/service-worker.js                    0.96 KiB         0.54 KiB
dist/js/about.edf670de.js                 0.44 KiB         0.31 KiB
dist/css/app.6504396d.css                 679.39 KiB       85.10 KiB

Um nicht genutzte Tailwind-CSS-Klassen aus deinem Bundle zu entfernen, nutzen wir PurgeCSS in Verbindung mit PostCSS. Dazu füge zuerst das notwendige Package dem Projekt hinzu:

npm install purgecss  @fullhuman/postcss-purgecss

Ist die Installation abgeschlossen, müssen wir in der PostCSS Config folgende Änderung vornehmen:

const purgecss = require(“@fullhuman/postcss-purgecss”);

module.exports = {
    plugins: [
      require(‘tailwindcss’),
      require(‘autoprefixer’),

    // Only add purgecss in production
    process.env.NODE_ENV === 'production'
      ? purgecss({
          content: ['./src/**/*.html', './src/**/*.vue'],
        })
      : '',
  ],
}

Wenn wir nun npm run build erneut starten, sollten wir bereits drastische Verbesserungen bei der CSS-Datei erkennen.

File                                      Size             Gzipped

dist/js/chunk-vendors.9080b304.js         119.90 KiB       41.68 KiB
dist/js/app.d8b6098b.js                   7.19 KiB         2.58 KiB
dist/service-worker.js                    0.96 KiB         0.55 KiB
dist/js/about.edf670de.js                 0.44 KiB         0.31 KiB
dist/css/app.69044861.css                 2.14 KiB         0.81 KiB

2.14 KiB damit lässt sich starten!

Links:

Setup eines VueJS Projektes mit der Vue CLI

Um ein neues VueJS Projekt zu starten gibt es verschiedene Wege. Der einfachste und angenehmste Weg ist das Setup mithilfe der Vue CLI. Um die CLI nutzen zu können, müssen zuerst die notwendigen NPM Module global installiert werden. Dazu kann folgender Command im Terminal ausgeführt werden:

npm install -g @vue/cli

#oder 

yarn global add @vue/cli 

Läuft die Installation erfolgreich durch, steht danach ein neuer Command im Terminal zur Verfügung. Mit vue -v lässt sich beispielsweise prüfen, welchen Version der Vue CLI nun installiert ist.

Das Projekt Setup über die CLI

Um ein Projektsetup zu starten kann man nun mithilfe von vue create + den gewünschten Projektname den Setup-Prozess über das Terminal starten.

vue create vue-setup

Nach dem Command startet ein kleiner Wizard, der durch das Setup führt. Zunächst wird man gefragt, ob man die Konfiguration manuell durchführen oder das Standard-Setup das nur Babel und ESLint beinhaltet, nutzen möchte. Wir wählen zunächst manuell mit den Pfeiltasten und anschließender Leertaste um zu sehen, welche Möglichkeiten angeboten werden.

Im manuellen Modus erscheinen nun alle Optionen und Packages die genutzt werden können. Beispielsweise kann ich relativ schnell und simpel den Vue Router meinem Projekt dadurch hinzufügen. Aber auch das Setup für Unit- und End-to-End Testing lässt sich anwählen.

Nachdem die gewünschte Auswahl vorgenommen wurde, lässt sich die Installation des Projektes und der nötigen Packages starten.

Mithilfe der CLI UI ein visuelles Projektsetup

Sollte man nicht zu den Terminal-Liebhabern gehören, lässt sich mithilfe eines modernen Interfaces ebenso ein Projektsetup durchführen. Dazu startet man im Terminal zunächst die UI mit:

vue ui

Dadurch öffnet sich auf Port 8000 das Vue UI Interface. Über Project Create startet man den bereits aus der CLI gewohnten Prozess beim Initialisieren eines neuen Projektes.

Zunächst lässt sich über der Speicherort aussuchen und der Projektname angeben. Ebenso kann zwischen npm oder yarn als Standard Package Manager gewählt werden. Eine Festlegung ist aber kein Muss. Sind die Einstellung getroffen, wird auch hier der Wizard Prozess gestartet.

Auch über die UI kann ein manuelles Setup durchgeführt werden, wenn zum Beispiel schon während des Setups der Vue Router oder Vuex hinzugefügt werden sollen.

Nach dem erfolgreichen Setup ist man startklar und kann sein Vue Projekt weiterentwickeln.

Was wir auf der VueJS Konferenz in London gelernt haben

Mit dem Ziel, die Vue.js Community besser kennenzulernen und Neuerung rund um das hippe JavaScript-Framework zu erfahren, haben wir uns auf den Weg nach London zur VueJS London gemacht. Für mich war es besonders außergewöhnlich, da ich früher weder geflogen bin noch in London war. London ist nicht nur wegen der Konferenz eine Reise wert. Die Stadt ist wirklich beeindruckend. Neuankömmlinge wie mich erkennt man relativ schnell, da sie beim Überqueren der Straße immer in die falsche Richtung schauen… *emoji*. 

Lufthansa brachte uns bequem nach London

Meetup der VueJS London Gruppe als Vorabevent

Als kleine Besonderheit vor der Konferenz hatte die lokale Vue.js Meetupgruppe ein Vorabevent organisiert. Bei spannenden Vorträgen von Chris Fritz (Mitglied des Vue Core Teams) und Jen Looper (Gründerin der Vue Vixen & senior Entwickler) und Chris DeMars zum Thema “accessibilty (A11Y)” gab es einen ersten Vorgeschmack auf die einen Tag später startende Konferenz. 

Der Vortrag von Chris, den Hauptverantwortlichen für die wirklich gut organisierte Vue.js Dokumentation, gab einen Überblick über neue Technologien und einige Tipps zum ‘best practices’. Die Neuerung bei den Vue Devtools unterstützen Entwickler immer besser dabei ihre Vue-Apps zu debuggen. Zudem hat er Weiterentwicklungen für die Vue CLI 3.0 damit verbundene Vue UI vorgestellt .

Jen Looper stellte vue-nativescript vor.

Jen Looper gab einen kleinen Talk zu den Grundlagen der mobilen Entwicklung mit Vue. In Verbindung mit NativeScript lassen sich in vertrauter Umgebung mobile Apps entwickeln. Jen hat ihre Eigenentwicklung vorgestellt: eine App die Schülern beim Sprachenlernen hilft. Die App bewertet die Genauigkeit der ausgesprochenen Wörter, sodass Aussprachefehler korrigiert werden können. 

Zweiter Tag – Tag der Workshops

Der offiziell erste Tag der Konferenz startet mit Tagesworkshops. Im Advanced Vue Workshop bei Chris Fritz gab es Tipps zum Vorgehen bei der Entwicklung größerer Applikationen. Der Workshop hat sich definitiv gelohnt. Wir haben die empfohlenen Grundsetups beleuchtet und mögliche Fallstricke besprochen, z. B.: den Unterschied zwischen scoped und module CSS, einige Wörter über ESlint und andere lints (z.B.: style). Chris hat auch sein entwickeltes Boilerplate für Enterprise Vue Apps vorgestellt.

Konferenztag mit Vorträgen

Der dritte Konferenztag war ein Feuerwerk an Vorträgen zum Framework. Auch war es irgendwie der Tag der Releases. Unter anderen wurde Nuxt 2.0 live auf der Bühne released.

Skype-Call mit Evan You

Der Kernentwickler Evan You ging in seinem Vortrag auf die Vorhaben bezüglich der Version 3 ein. Unter anderen soll die neue Version komplett in TypeScript entwickelt. Seine Ideen hat er auch nach dem Konferenz in einem Blogpost veröffentlicht. 

Jen Looper sprach über AI und ihre verschiedene Arten und wie sie lernen. Sie hatte eine mobile Beispiel-App mit NativeScript für Vue.js entwickelt Auch hier wurde auf der Bühne die Version 2 für nativescript-vue angekündigt..

Ein ziemlich beeindruckender Vortrag war die Präsentation der Neuerung der Codesandbox von Ives van Hoorne. Es ist nun möglich auch serverseitige Template innerhalb einer Sandbox zu nutzen. Somit können auch ziemlich schnell prototypische Nuxt.js Apps aufgesetzt werden.

Daniel Rossenwasser hat die Neuerung rund um die Arbeit mit TypesScript und Vue vorgestellt. Der Hinweis darauf, dass Vue 3 in TypeScript entwickelt wird, zeigt welche Richtung das Kernteam einschlägt.

VueJS und London waren definitiv eine Reise wert

Diese Reise hat sich auf jeden Fall gelohnt. Trotz zahlreicher Möglichkeiten sich im Web über VueJS auf dem Laufenden zu halten, war die VueJS London ein inspirierendes Erlebnis.

Alle Neuerung und Entwicklungen greifen wir auch in unserem Vue.js Workshop auf.