Deutsch

Entdecken Sie statische Exporte in Next.js für reine Client-seitige Anwendungen. Lernen Sie Vorteile, Einschränkungen, Einrichtung und fortgeschrittene Techniken kennen, um schnelle und sichere Web-Erlebnisse zu schaffen.

Statische Exporte in Next.js: Entwicklung reiner Client-seitiger Anwendungen

Next.js ist ein leistungsstarkes React-Framework, das Entwicklern ermöglicht, performante, skalierbare und SEO-freundliche Webanwendungen zu erstellen. Obwohl Next.js für seine serverseitigen Rendering- (SSR) und statischen Seitengenerierungs- (SSG) Fähigkeiten bekannt ist, bietet es auch die Flexibilität, reine Client-seitige Anwendungen mittels statischer Exporte zu erstellen. Dieser Ansatz ermöglicht es Ihnen, die Vorteile der Tools und der Struktur von Next.js zu nutzen, während Sie eine rein Client-seitige Anwendung bereitstellen. Dieser Beitrag führt Sie durch alles, was Sie über die Erstellung von reinen Client-seitigen Anwendungen mit statischen Next.js-Exporten wissen müssen, und behandelt die Vorteile, Einschränkungen, den Einrichtungsprozess und fortgeschrittene Techniken.

Was sind statische Exporte in Next.js?

Statische Exporte in Next.js bezeichnen den Prozess der Generierung einer vollständig statischen Version Ihrer Anwendung während des Build-Prozesses. Das bedeutet, dass alle HTML-, CSS- und JavaScript-Dateien vorgerendert und bereit sind, direkt von einem statischen Dateiserver (z.B. Netlify, Vercel, AWS S3 oder einem traditionellen Webserver) ausgeliefert zu werden. Im Gegensatz zu serverseitig gerenderten Anwendungen ist kein Node.js-Server erforderlich, um eingehende Anfragen zu bearbeiten. Stattdessen wird die gesamte Anwendung als eine Sammlung statischer Assets ausgeliefert.

Wenn eine reine Client-seitige Anwendung das Ziel ist, generiert Next.js diese statischen Assets unter der Annahme, dass das gesamte dynamische Verhalten durch Client-seitiges JavaScript gehandhabt wird. Dies ist besonders nützlich für Single Page Applications (SPAs), die hauptsächlich auf Client-seitigem Routing, API-Aufrufen und Benutzerinteraktionen basieren.

Warum statische Exporte für Client-seitige Anwendungen wählen?

Die Erstellung von Client-seitigen Anwendungen mit statischen Next.js-Exporten bietet mehrere überzeugende Vorteile:

Einschränkungen von statischen Exporten

Obwohl statische Exporte zahlreiche Vorteile bieten, ist es wichtig, sich ihrer Einschränkungen bewusst zu sein:

Einrichtung von Next.js für statische Exporte

Hier ist eine Schritt-für-Schritt-Anleitung zur Einrichtung von Next.js für statische Exporte:

1. Erstellen Sie ein neues Next.js-Projekt

Wenn Sie noch kein Next.js-Projekt haben, erstellen Sie eines mit dem folgenden Befehl:

npx create-next-app my-client-app

Wählen Sie während des Einrichtungsprozesses die Optionen, die Ihren Bedürfnissen am besten entsprechen (z.B. TypeScript, ESLint).

2. Konfigurieren Sie `next.config.js`

Öffnen Sie die Datei `next.config.js` im Stammverzeichnis Ihres Projekts und fügen Sie die folgende Konfiguration hinzu:

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export',
  trailingSlash: true,
  // Optional: Ändert Links `/me` -> `/me/` und erzeugt `/me.html` -> `/me/index.html`
  // siehe https://nextjs.org/docs/app/api-reference/next-config#trailing-slash
  // experimental:
  //  {appDir: false}
}

module.exports = nextConfig

Die Option `output: 'export'` weist Next.js an, einen statischen Export Ihrer Anwendung zu generieren. Die Einstellung `trailingSlash: true` wird im Allgemeinen empfohlen, um eine konsistente URL-Struktur zu gewährleisten und potenzielle SEO-Probleme zu vermeiden.

3. Aktualisieren Sie `package.json`

Ändern Sie den `scripts`-Abschnitt Ihrer `package.json`-Datei, um ein Build-Skript für statische Exporte einzuschließen:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build && next export",
    "start": "next start",
    "lint": "next lint"
  }
}

Dieses Skript wird zuerst Ihre Next.js-Anwendung bauen und sie dann in ein statisches Verzeichnis exportieren.

4. Implementieren Sie Client-seitiges Routing

Da Sie eine Client-seitige Anwendung erstellen, müssen Sie das Client-seitige Routing mit dem `next/router`-Modul oder einer Drittanbieter-Bibliothek wie `react-router-dom` implementieren. Hier ist ein Beispiel mit `next/router`:

import { useRouter } from 'next/router';
import Link from 'next/link';

function HomePage() {
  const router = useRouter();

  const handleClick = () => {
    router.push('/about');
  };

  return (
    <div>
      <h1>Home Page</h1>
      <p>Welcome to the home page!</p>
      <button onClick={handleClick}>Go to About Page</button>

      <Link href="/about">
         <a>Go to About Page (using Link)</a>
      </Link>
    </div>
  );
}

export default HomePage;

Denken Sie daran, die `Link`-Komponente von `next/link` für die interne Navigation zu verwenden, um reibungslose Client-seitige Übergänge zu gewährleisten.

5. Handhaben Sie den Datenabruf auf der Client-Seite

In einer Client-seitigen Anwendung muss der gesamte Datenabruf auf der Client-Seite mit Techniken wie den `useEffect`- oder `useState`-Hooks erfolgen. Zum Beispiel:

import { useState, useEffect } from 'react';

function DataPage() {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    async function fetchData() {
      try {
        const response = await fetch('https://api.example.com/data');
        if (!response.ok) {
          throw new Error(`HTTP error! status: ${response.status}`);
        }
        const jsonData = await response.json();
        setData(jsonData);
      } catch (e) {
        setError(e);
      } finally {
        setLoading(false);
      }
    }

    fetchData();
  }, []);

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error: {error.message}</p>;
  if (!data) return <p>No data to display</p>;

  return (
    <div>
      <h1>Data Page</h1>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
}

export default DataPage;

6. Bauen und exportieren Sie Ihre Anwendung

Führen Sie das Build-Skript aus, um den statischen Export zu generieren:

npm run build

Dies erstellt ein `out`-Verzeichnis (oder `public`, je nach Next.js-Version), das die statischen HTML-, CSS- und JavaScript-Dateien für Ihre Anwendung enthält.

7. Stellen Sie Ihre statische Seite bereit

Sie können nun den Inhalt des `out`-Verzeichnisses bei einem Anbieter für statisches Hosting wie Netlify, Vercel, AWS S3 oder GitHub Pages bereitstellen. Die meisten Anbieter bieten eine einfache Drag-and-Drop-Bereitstellung oder Befehlszeilentools zur Automatisierung des Prozesses an.

Fortgeschrittene Techniken für Client-seitige Next.js-Anwendungen

Hier sind einige fortgeschrittene Techniken zur Optimierung Ihrer Client-seitigen Next.js-Anwendungen:

1. Code-Splitting und Lazy Loading

Verwenden Sie dynamische Importe (`import()`), um Ihren Code in kleinere Chunks aufzuteilen, die bei Bedarf geladen werden. Dies kann die anfänglichen Ladezeiten erheblich verbessern, insbesondere bei großen Anwendungen.

import React, { Suspense } from 'react';

const MyComponent = React.lazy(() => import('./MyComponent'));

function MyPage() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <MyComponent />
    </Suspense>
  );
}

2. Bildoptimierung

Verwenden Sie die `next/image`-Komponente zur Bildoptimierung. Diese Komponente optimiert Bilder automatisch für verschiedene Geräte und Bildschirmgrößen, was die Leistung und die Benutzererfahrung verbessert. Sie unterstützt Lazy Loading, responsive Bilder und verschiedene Bildformate.

import Image from 'next/image';

function MyComponent() {
  return (
    <Image
      src="/images/my-image.jpg"
      alt="My Image"
      width={500}
      height={300}
    />
  );
}

3. Service Worker

Implementieren Sie einen Service Worker, um Offline-Funktionalität zu ermöglichen und die Leistung zu verbessern. Ein Service Worker ist ein Skript, das im Hintergrund läuft und Netzwerkanfragen abfangen, Assets zwischenspeichern und Push-Benachrichtigungen senden kann. Bibliotheken wie `next-pwa` können den Prozess des Hinzufügens eines Service Workers zu Ihrer Next.js-Anwendung vereinfachen.

4. Umgebungsvariablen

Verwenden Sie Umgebungsvariablen, um Ihre Anwendung für verschiedene Umgebungen (z.B. Entwicklung, Staging, Produktion) zu konfigurieren. Next.js bietet integrierte Unterstützung für Umgebungsvariablen über die `.env`-Datei und das `process.env`-Objekt. Achten Sie darauf, keine sensiblen Informationen im Client-seitigen Code preiszugeben. Verwenden Sie Umgebungsvariablen hauptsächlich für Konfigurationseinstellungen, deren Offenlegung unbedenklich ist.

5. Monitoring und Analytics

Integrieren Sie einen Monitoring- und Analytics-Dienst (z.B. Google Analytics, Sentry oder New Relic), um Leistungskennzahlen zu verfolgen, Fehler zu identifizieren und Einblicke in das Benutzerverhalten zu gewinnen. Dies hilft Ihnen, Ihre Anwendung zu optimieren und die Benutzererfahrung im Laufe der Zeit zu verbessern.

6. SEO-Optimierung in Client-seitigen Anwendungen

Obwohl statische Exporte eine initiale HTML-Struktur bereitstellen, sollten Sie diese Strategien für eine bessere SEO in stark Client-seitigen Anwendungen in Betracht ziehen:

Überlegungen zur Internationalisierung (i18n)

Beim Aufbau einer Client-seitigen Anwendung für ein globales Publikum ist die Internationalisierung (i18n) entscheidend. Hier sind einige bewährte Praktiken:

Den richtigen Ansatz wählen: Statischer Export vs. serverseitiges Rendering

Die Entscheidung, ob statische Exporte oder serverseitiges Rendering verwendet werden sollen, hängt von den spezifischen Anforderungen Ihrer Anwendung ab. Berücksichtigen Sie die folgenden Faktoren:

Beispiele aus der Praxis

Hier sind einige Beispiele aus der Praxis für Anwendungen, die von statischen Next.js-Exporten profitieren können:

Beispiel: Internationale Unternehmenswebsite

Stellen Sie sich ein Unternehmen mit Büros in New York, London und Tokio vor. Sie möchten eine Website, die auf Englisch, Französisch und Japanisch verfügbar ist. Ein statischer Export von Next.js, kombiniert mit einem Headless CMS und i18n-Bibliotheken, könnte ideal sein. Das CMS würde den übersetzten Inhalt speichern, Next.js würde ihn abrufen und Client-seitig rendern, und die statische Seite könnte global auf einem CDN für schnellen Zugriff bereitgestellt werden.

Fazit

Statische Exporte in Next.js bieten eine leistungsstarke Möglichkeit, reine Client-seitige Anwendungen mit den Vorteilen des Next.js-Frameworks zu erstellen. Indem Sie die Vorteile, Einschränkungen, den Einrichtungsprozess und fortgeschrittene Techniken verstehen, können Sie schnelle, sichere und global zugängliche Web-Erlebnisse schaffen, die Ihren spezifischen Anforderungen entsprechen. Ob Sie eine einfache Landing Page oder eine komplexe SPA erstellen, statische Exporte können ein wertvolles Werkzeug in Ihrem Webentwicklungs-Arsenal sein.

Statische Exporte in Next.js: Entwicklung reiner Client-seitiger Anwendungen | MLOG