Suche…


Bemerkungen

Diese Build-Pipeline ist nicht genau das, was Sie als "produktionsbereit" bezeichnen würden, aber es ist ein guter Anfang, um die Dinge hinzuzufügen, die Sie benötigen, um die gewünschte Entwicklungserfahrung zu erhalten. Einige Leute verfolgen (manchmal auch ich selbst) eine komplett aufgebaute Pipeline von Yeoman.io oder woanders und entfernen dann die Dinge, die sie nicht wollen, bis sie ihrem Stil entsprechen. Daran ist nichts falsch, aber vielleicht können Sie sich für das obige Beispiel für den umgekehrten Ansatz entscheiden und aus nackten Knochen aufbauen.

Einige Dinge, die Sie vielleicht hinzufügen möchten, sind Dinge wie ein Testframework und Abdeckungsstatistiken wie Karma mit Mocha oder Jasmin. Fusseln mit ESLint. Hot-Modul-Austausch im Webpack-Dev-Server, damit Sie diese Erfahrung mit Ctrl + S, F5 machen können. Außerdem wird die aktuelle Pipeline nur im dev-Modus erstellt, sodass eine Produktionsaufgabe gut ist.

Gotchas!

Beachten Sie in der context webpack.config.js der webpack.config.js wir den Pfad webpack.config.js des webpack.config.js definiert haben, anstatt __dirname mit der Zeichenfolge /src verketten . Um die Lösung plattformübergreifender zu machen, verwenden Sie den Hebelknoten, um uns zu helfen.

Erläuterung der Eigenschaften von webpack.config.js

Kontext

Dies ist der Dateipfad, für den Webpack als Stammpfad zum Auflösen relativer Dateipfade verwendet wird. In index.jsx, wo wir „request require('./index.html') , wird der Punkt tatsächlich in das Verzeichnis src/ da wir ihn in dieser Eigenschaft als solche definiert haben.

Eintrag

Wo Webpack an erster Stelle steht, beginnt die Lösung. Deshalb sehen Sie in der index.jsx, dass wir die Lösung mit Anforderungen und Importen zusammennähen.

Ausgabe

Hier definieren wir, wo das Webpack die Dateien ablegen soll, die es als Bundle gefunden hat. Wir haben auch einen Namen für die Datei definiert, in der unser gebündeltes Javascript und unsere Styles gelöscht werden.

devServer

Dies sind spezifische Einstellungen für den Webpack-Dev-Server. Die contentBase legt fest, wo der Server sein root sein soll. Wir haben hier den Ordner dist/ als Basis definiert. Der port ist der Port, auf dem der Server gehostet wird. open wird der webpack-dev-server angewiesen, Ihren Standardbrowser für Sie zu öffnen, sobald der Server hochgefahren ist.

Modul> Lader

Dies definiert ein Mapping, das Webpack verwenden soll, sodass es weiß, was zu tun ist, wenn andere Dateien gefunden werden. Die test -Eigenschaft gibt regex für webpack an, um zu bestimmen, ob es dieses Modul anwenden soll. In den meisten Fällen haben wir Übereinstimmungen mit Dateierweiterungen. loader oder loaders geben den Namen des Loader-Moduls an, mit dem wir die Datei in das Webpack laden möchten, und sorgen dafür, dass der Loader die Bündelung dieses Dateityps übernimmt. Es gibt auch eine query Eigenschaft im Javascript, diese enthält lediglich eine Abfragezeichenfolge für den Loader. Daher hätten wir wahrscheinlich auch eine Query-Eigenschaft für den HTML-Loader verwenden können, wenn wir dies wollten. Es ist nur eine andere Art, Dinge zu tun.

Erstellen einer Pipeline für eine angepasste "Hallo Welt" mit Bildern.

Schritt 1: Installieren Sie Node.js

Die Build-Pipeline, die Sie erstellen, basiert auf Node.js. Sie müssen also zunächst sicherstellen, dass Sie diese installiert haben. Eine Anleitung, wie installieren Node.js Sie die SO - Dokumentation für diese Prüfung können hier

Schritt 2: Initialisieren Sie Ihr Projekt als Knotenmodul

Öffnen Sie Ihren Projektordner in der Befehlszeile und verwenden Sie den folgenden Befehl:

npm init

Für die Zwecke dieses Beispiels können Sie die Standardeinstellungen übernehmen oder wenn Sie weitere Informationen dazu benötigen, was dies bedeutet, können Sie dieses SO-Dokument beim Einrichten der Paketkonfiguration überprüfen.

Schritt 3: Installieren Sie die erforderlichen npm-Pakete

Führen Sie den folgenden Befehl in der Befehlszeile aus, um die für dieses Beispiel erforderlichen Pakete zu installieren:

npm install --save react react-dom

Dann für die Dev-Abhängigkeiten diesen Befehl ausführen:

npm install --save-dev babel-core babel-preset-react babel-preset-es2015 webpack babel-loader css-loader style-loader file-loader image-webpack-loader 

Schließlich sind webpack und webpack-dev-server Dinge, die es wert sind, global installiert zu werden, und nicht als Abhängigkeit von Ihrem Projekt. Wenn Sie es lieber als Abhängigkeit hinzufügen möchten, funktioniert das, ich tue es nicht. Hier ist der Befehl zum Ausführen:

npm install --global webpack webpack-dev-server 

Schritt 3: Fügen Sie dem Stamm Ihres Projekts eine .babelrc-Datei hinzu

Dadurch wird Babel so eingerichtet, dass die gerade installierten Voreinstellungen verwendet werden. Ihre .babelrc-Datei sollte folgendermaßen aussehen:

{
  "presets": ["react", "es2015"]
}

Schritt 4: Projektverzeichnisstruktur einrichten

Richten Sie sich eine Verzeichnisstruktur ein, die im Stammverzeichnis Ihres Verzeichnisses wie folgt aussieht:

|- node_modules
|- src/
  |- components/
  |- images/
  |- styles/
  |- index.html
  |- index.jsx
|- .babelrc
|- package.json

HINWEIS: Die node_modules , .babelrc und package.json sollten bereits in den vorherigen Schritten vorhanden gewesen sein. Ich habe sie nur node_modules , damit Sie sehen können, wo sie passen.

Schritt 5: Füllen Sie das Projekt mit den Hello World-Projektdateien

Dies ist nicht wirklich wichtig für den Aufbau einer Pipeline. Ich gebe Ihnen einfach den Code für diese und Sie können sie kopieren und einfügen:

src / components / HelloWorldComponent.jsx

import React, { Component } from 'react';

class HelloWorldComponent extends Component {
  constructor(props) {
    super(props);
    this.state = {name: 'Student'};
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(e) {
    this.setState({name: e.target.value});
  }

  render() {
    return (
      <div>
        <div className="image-container">
          <img src="./images/myImage.gif" />
        </div>
        <div className="form">
          <input type="text" onChange={this.handleChange} />
          <div>
            My name is {this.state.name} and I'm a clever cloggs because I built a React build pipeline
          </div>
        </div>
      </div>
    );
  }
}

export default HelloWorldComponent;

src / images / meinImage.gif

Fühlen Sie sich frei, dies durch jedes Bild zu ersetzen, das Sie möchten, es ist einfach da, um zu beweisen, dass wir auch Bilder bündeln können. Wenn Sie Ihr eigenes Bild angeben und es anders benennen, müssen Sie die HelloWorldComponent.jsx aktualisieren, um Ihre Änderungen widerzuspiegeln. Ebenso , wenn Sie ein Bild mit einer anderen Dateierweiterung wählen , dann müssen Sie das ändern test Eigenschaft des Bildes Lader in den webpack.config.js mit entsprechenden regulären Ausdruck Ihrer neuen Dateierweiterung übereinstimmen ..

src / styles / styles.css

.form {
  margin: 25px;
  padding: 25px;
  border: 1px solid #ddd;
  background-color: #eaeaea;
  border-radius: 10px;
}

.form div {
  padding-top: 25px;
}

.image-container {
  display: flex;
  justify-content: center;
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Learning to build a react pipeline</title>
</head>
<body>
  <div id="content"></div>
  <script src="app.js"></script>
</body>
</html>

index.jsx

import React from 'react';
import { render } from 'react-dom';
import HelloWorldComponent from './components/HelloWorldComponent.jsx';

require('./images/myImage.gif');
require('./styles/styles.css');
require('./index.html');

render(<HelloWorldComponent />, document.getElementById('content'));

Schritt 6: Erstellen Sie eine Webpack-Konfiguration

Erstellen Sie eine Datei mit dem Namen webpack.config.js im Stammverzeichnis Ihres Projekts, und kopieren Sie diesen Code hinein:

webpack.config.js

var path = require('path');

var config = {
  context: path.resolve(__dirname + '/src'),
  entry: './index.jsx',
  output: {
    filename: 'app.js',
    path: path.resolve(__dirname + '/dist'),
  },
  devServer: {
    contentBase: path.join(__dirname + '/dist'),
    port: 3000,
    open: true,
  },
  module: {
    loaders: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        loader: "style!css"
      },
      {
        test: /\.gif$/,
        loaders: [
          'file?name=[path][name].[ext]',
          'image-webpack',
        ]
      },
      { test: /\.(html)$/,
        loader: "file?name=[path][name].[ext]"
      }
    ],
  },
};

module.exports = config;

Schritt 7: Erstellen Sie npm-Aufgaben für Ihre Pipeline

Dazu müssen Sie dem Scripts-Schlüssel des JSON, der in der Datei package.json im Stammverzeichnis Ihres Projekts definiert ist, zwei Eigenschaften hinzufügen. Machen Sie Ihren Skriptschlüssel so aussehen:

  "scripts": {
    "start": "webpack-dev-server",
    "build": "webpack",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

Das test bereits vorhanden und Sie können auswählen, ob Sie es behalten möchten oder nicht. Dies ist für dieses Beispiel nicht wichtig.

Schritt 8: Verwenden Sie die Pipeline

Wenn Sie sich in der Befehlszeile im Projektstammverzeichnis befinden, sollten Sie jetzt den Befehl ausführen können:

npm run build

Dadurch wird die von Ihnen erstellte kleine Anwendung gebündelt und in dem Verzeichnis dist/ , das sie im Stammverzeichnis Ihres Projektordners erstellt.

Wenn Sie den Befehl ausführen:

npm start

Die von Ihnen erstellte Anwendung wird dann in Ihrem Standard-Webbrowser in einer Webpack-Dev-Serverinstanz bereitgestellt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow