Building and testing Node.js

Du kannst einen Workflow für kontinuierliche Integration (CI) erstellen, um Dein Node.js-Projekt zu bauen und zu testen.

Einführung

Diese Anleitung zeigt Dir, wie Du einen Workflow für fortlaufende Integration (CI) erstellen kannst, der Node.js-Code baut und testet. Wenn Deine CI-Tests erfolgreich durchlaufen, kannst Du Deinen Code deployen (bereitstellen) oder ein Paket veröffentlichen.

Vorrausetzungen

Wir empfehlen, dass Du ein grundlegendes Verständnis von Node.js, YAML, Workflowkonfigurations-Optionen und die Erstellung einer Workflow-Datei hast. Weitere Informationen findest Du unter:

Einstieg mit einer Node.js-Workflow-Vorlage

GitHub bietet eine Node.js-Workflow-Vorlage, die für die meisten Node.js-basierten Projekte funktionieren wird. Diese Anleitung enthält npm und Yarn Beispiele, mit denen Du die Vorlage anpassen kannst. Weitere Informationen findest Du in der Node.js-Workflow-Vorlage.

Um schnell loszulegen, füge die Vorlage in das Verzeichnis .github/workflows Deines Repositorys ein. The workflow shown below assumes that the default branch for your repository is main.

YAML
name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [10.x, 12.x, 14.x, 15.x]

    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Ausführen auf einem anderen Betriebssystem

Die Starter-Workflowvorlage konfiguriert Aufträge zur Ausführung unter Linux und verwendet GitHub-gehostete ubuntu-latest Läufer. Du kannst den runs-on (läuft auf) Schlüssel ändern, um Deine Aufträge auf einem anderen Betriebssystem auszuführen. Beispielsweise kannst Du die GitHub-gehosteten Windows-Läufer verwenden.

runs-on: windows-latest

Oder Du kannst auf den GitHub-gehosteten macOS-Läufern laufen.

runs-on: macos-latest

Du kannst Aufträge auch in Docker-Containern ausführen oder einen selbst gehosteten Läufer bereitstellen, der auf Deiner eigenen Infrastruktur läuft. Weitere Informationen findest Du unter „Workflow Syntax für GitHub Actions."

Die Node.js-Version angeben

Der einfachste Weg, eine Node.js-Version anzugeben, ist die Aktion setup-node von GitHub zu verwenden. Weitere Informationen findest Du unter setup-node.

Die Aktion setup-node nimmt eine Node.js-Version als Eingabe und konfiguriert diese Version auf dem Runner. Die Aktion setup-node findet auf jedem Runner eine bestimmte Version von Node.js aus dem Tools-Cache und legt die notwendigen Binärdateien im PATH ab, wo sie für den Rest des Jobs bestehen bleiben. Für Node.js mit GitHub Actions wird empfohlen, die Aktion setup-node zu verwenden, weil dadurch über verschiedenen Runner und verschiedenen Versionen von Node.js hinweg ein konsistentes Verhalten sicherstellt wird. Wenn Du einen selbst gehosteten Runner verwendest, musst Du Node.js installieren und zum PATH hinzufügen.

The template includes a matrix strategy that builds and tests your code with four Node.js versions: 10.x, 12.x, 14.x, and 15.x. The 'x' is a wildcard character that matches the latest minor and patch release available for a version. Jede Version von Node.js, die im Array node-version festgelegt ist, erstellt einen Job, der die gleichen Schritte ausführt.

Jeder Job in der Matrix kann mithilfe des Matrix-Kontexts auf den im Array node-version definierten Wert zugreifen. Die Aktion setup-node verwendet den Kontext als Eingabe für node-version. Die Aktion setup-node konfiguriert jeden Job mit einer anderen Node.js-Version bevor sie den Code baut und testet. For more information about matrix strategies and contexts, see "Workflow syntax for GitHub Actions" and "Contexts."

YAML
strategy:
  matrix:
    node-version: [10.x, 12.x, 14.x, 15.x]

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
  uses: actions/setup-node@v2
  with:
    node-version: ${{ matrix.node-version }}

Alternativ kannnst Du auch mit genauen Node.js-Versionen bauen und testen.

YAML
strategy:
  matrix:
    node-version: [8.16.2, 10.17.0]

Oder Du kannst auch mithilfe einer einzelnen Version von Node.js bauen und testen.

YAML
name: Node.js CI

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'
      - run: npm ci
      - run: npm run build --if-present
      - run: npm test

Wenn Du keine Node.js Version festlegst, verwendet GitHub die standardmäßige Node.js Version der Umgebung. For instructions on how to make sure your AE hosted runner has the required software installed, see "Creating custom images."

Abhängigkeiten installieren

Auf GitHub-gehosteten Runnern sind die Abhängigkeitsmanager npm und Yarn installiert. Du kannst npm und Yarn verwenden, um in Ihrem Workflow Abhängigkeiten zu installieren, bevor Du Deinen Code baust und testest. Die auf GitHub gehosteten Windows- und Linux-Runner haben auch Grunt, Gulp und Bower installiert.

When using GitHub-hosted runners, you can also cache dependencies to speed up your workflow. Weitere Informationen findest Du unter „Abhängigkeiten zur Beschleunigung von Workflows im Cache zwischenspeichern“.

Beispiel mit npm

Dieses Beispiel installiert die Abhängigkeiten, die in der Datei package.json definiert sind. Weitere Informationen findest Du unter npm install.

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm install

Du kannst mithilfe npm ci die Versionen in der Datei package-lock.json oder npm-shrinkwrap.json installieren und Aktualisierungen der Sperrdatei verhindern. npm ci zu verwenden ist gewöhnlich schneller als npm install laufen zu lassen. Weitere Informationen findest Du unter npm ci und „Einführung in npm ci für schnellere und zuverlässigere Builds“.

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: npm ci

Beispiel mit Yarn

Dieses Beispiel installiert die Abhängigkeiten, die in der Datei package.json definiert sind. Weitere Informationen findest Du unter Yarn-Installation.

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn

Alternativ kannst Du --frozen-lockfile übergeben, um die Versionen in der Datei yarn.lock zu installieren und Aktualisierungen der Datei yarn.lock zu verhindern.

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- name: Install dependencies
  run: yarn --frozen-lockfile

Beispiel mit einer privaten Registry und Erstellung der Datei .npmrc

Du kannst die setup-node Aktion verwenden, um eine lokale .npmrc Datei auf dem Läufer zu erstellen, der die Standardregistrierung und -Reichweite konfiguriert. Die setup-node Aktion akzeptiert als Eingabe auch ein Authentifizierungstoken, das für den Zugriff auf private Registrierungen oder das Veröffentlichen von Knotenpaketen verwendet wird. Weitere Informationen findest Du unter setup-node.

To authenticate to your private registry, you'll need to store your npm authentication token as a secret. For example, create a repository secret called NPM_TOKEN. Weitere Informationen findest Du unter „Verschlüsselte Geheimnisse erstellen und verwenden“.

Im folgenden Beispiel enthält das Geheimnis NPM_TOKEN den npm-Authentifizierungs-Token. Die Aktion setup-node konfiguriert die Datei .npmrc, um den npm-Authentifizierung-Token aus der Umgebungsvariablen NODE_AUTH_TOKEN zu lesen. When using the setup-node action to create an .npmrc file, you must set the NODE_AUTH_TOKEN environment variable with the secret that contains your npm authentication token.

Bevor Du Abhängigkeiten installierst, verwende die Aktion setup-node, um die Datei .npmrc zu erstellen. Die Aktion hat zwei Eingabeparameter. Der Parameter node-version legt die Version von Node.js fest und der Parameter registry-url bestimmt die Standard-Registry. Wenn Deine Paket-Registry Geltungsbereiche verwendet, musst Du den Parameter scope verwenden. Weitere Informationen findest Du unter npm-scope.

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    always-auth: true
    node-version: '12.x'
    registry-url: https://registry.npmjs.org
    scope: '@octocat'
- name: Install dependencies
  run: npm ci
  env:
    NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}

Das obige Beispiel erzeugt eine .npmrc Datei mit folgendem Inhalt:

//registry.npmjs.org/:_authToken=${NODE_AUTH_TOKEN}
@octocat:registry=https://registry.npmjs.org/
always-auth=true

Beispiel zum Zwischenspeichern von Abhängigkeiten im Cache

When using GitHub-hosted runners, you can cache and restore the dependencies using the setup-node action.

The following example caches dependencies for npm.

YAML
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
  with:
    node-version: '14'
    cache: 'npm'
- run: npm install
- run: npm test

The following example caches dependencies for Yarn.

YAML
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
  with:
    node-version: '14'
    cache: 'yarn'
- run: yarn
- run: yarn test

The following example caches dependencies for pnpm (v6.10+).

YAML
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# dokumentation.

# NOTE: pnpm caching support requires pnpm version >= 6.10.0

steps:
- uses: actions/checkout@v2
- uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
  with:
    version: 6.10.0
- uses: actions/setup-node@v2
  with:
    node-version: '14'
    cache: 'pnpm'
- run: pnpm install
- run: pnpm test

To cache dependencies, you must have a package-lock.json, yarn.lock, or pnpm-lock.yaml file in the root of the repository. If you need more flexible customization, you can use the cache action. For more information, see "Caching dependencies to speed up workflows".

Deinen Code bauen und testen

Du kannst die gleichen Befehle verwenden, die Du auch lokal verwendest, um Deinen Code zu erstellen und zu testen. Wenn Du beispielsweise npm run build ausführst, um die in Deinem package.json definierten Build-Schritte zu durchlaufen, und npm test, um Deine Testsuite laufen zu lassen, dann fügst Di diese Befehle in Deine Workflow-Datei ein.

YAML
steps:
- uses: actions/checkout@v2
- name: Use Node.js
  uses: actions/setup-node@v2
  with:
    node-version: '12.x'
- run: npm install
- run: npm run build --if-present
- run: npm test

Workflow-Daten als Artefakte paketieren

Du kannst Artefakte aus deinen Build- und Testschritten speichern, um sie nach dem Abschluss eines Jobs anzuzeigen. Zum Beispiel kann es notwendig sein, Logdateien, Core Dumps, Testergebnisse oder Screenshots zu speichern. Weitere Informationen findest Du unter „Workflow-Daten mittels Artefakten persistieren“.

In Paket-Registries veröffentlichen

Du kannst Deinen Workflow so konfigurieren, dass Dein Node.js-Paket nach Bestehen Deiner CI-Tests in einer Paket-Registry veröffentlicht wird. Weitere Informationen zum Veröffentlichen in npm und GitHub Packages findest Du unter „Node.js Pakete veröffentlichen“.

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

Oder, learn how to contribute.