Sök…


Anmärkningar

Denna build-pipeline är inte exakt vad du skulle kalla "produktionsklar" men det ger en solid start för dig att lägga till de saker du behöver för att få den utvecklingsupplevelse du letar efter. Den metod som vissa människor tar (inklusive mig själv ibland) är att ta en helt uppbyggd pipeline av Yeoman.io eller någon annanstans och sedan ta bort de saker de inte vill förrän det passar där stil. Det finns inget fel med det här, men kanske med exemplet ovan kan du välja det motsatta tillvägagångssättet och bygga upp från bara ben.

Några saker du kanske vill lägga till är saker som en testram och täckningsstatistik som Karma med Mocha eller Jasmine. Foder med ESLint. Ersättning av het modul i webpack-dev-server så att du kan få den Ctrl + S, F5 utvecklingsupplevelsen. Även den nuvarande pipeline bygger bara i dev-läge så att en produktionsuppbyggnadsuppgift skulle vara bra.

Gotchas!

Lägg märke till i kontextegenskapen för webpack.config.js vi har använt modulen för __dirname för att definiera vår sökväg snarare än att bara sammanfoga __dirname till strängen /src detta beror på att windows hatar framåt snedstreck . Så för att göra lösningen mer kompatibel med plattformar använder du hävstångsnoden för att hjälpa oss.

Förklaring av webpack.config.js-egenskaper

sammanhang

Detta är filvägen som webpack kommer att använda som sin root-bana för att lösa relativa filvägar. Så i index.jsx där vi använder require('./index.html') den punkten faktiskt löser sig till src/ katalogen eftersom vi har definierat den som sådan i den här egenskapen.

inträde

Där webpack ser först ut för att börja samla lösningen. Det är därför du ser att vi i index.jsx sy ihop lösningen med krav och import.

produktion

Det är här vi definierar var webpack ska släppa filfilerna som den har hittat att buntas. Vi har också definierat ett namn för filen där vårt bundna javascript och stilar kommer att släppas.

devServer

Dessa är inställningar specifika för webpack-dev-server. contentBase definierar var servern ska göra sin rot, vi har definierat dist/ mappen som vår bas här. port är den port som servern kommer att vara värd för. open är det som används för att instruera webpack-dev-server att öppna din standardwebbläsare för dig när den har spunnit upp servern.

modul> lastare

Detta definierar en kartläggning för webbpakke att använda så att den vet vad man ska göra när den hittar olika filer. Den test egenskapen ger regex för Webpack att använda för att avgöra om det bör gälla denna modul, i de flesta fall vi har matcher på filtillägg. loader eller loaders anger namnet på den laddningsmodul som vi vill använda för att ladda filen i webpack och låta den lastaren ta hand om paket av den filtypen. Det finns också en query i javascript, detta ger bara en frågesträng till laddaren, så vi kunde förmodligen ha använt en frågaegenskap i html-laddaren också om vi ville. Det är bara ett annat sätt att göra saker.

Hur man bygger en pipeline för en anpassad "Hello world" med bilder.

Steg 1: Installera Node.js

Byggledningen som du bygger är baserad i Node.js så du måste i första hand se till att du har detta installerat. För instruktioner om hur du installerar Node.js kan du kolla in SO-dokumenten för det här

Steg 2: Initiera ditt projekt som en nodmodul

Öppna din projektmapp på kommandoraden och använd följande kommando:

npm init

I det här exemplet kan du gärna ta standardinställningarna eller om du vill ha mer information om vad allt detta betyder kan du kolla in detta SO-dokument när du ställer in paketkonfiguration.

Steg 3: Installera nödvändiga npm-paket

Kör följande kommando på kommandoraden för att installera de paket som krävs för detta exempel:

npm install --save react react-dom

Kör sedan kommandot för dev-beroenden:

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

Slutligen är webpack och webpack-dev-server saker som är värda att installera globalt snarare än som ett beroende av ditt projekt, om du föredrar att lägga till det som ett beroende så kommer det att fungera, det gör jag inte. Här är kommandot att köra:

npm install --global webpack webpack-dev-server 

Steg 3: Lägg till en .babelrc-fil till roten till ditt projekt

Detta kommer att installera babeln för att använda de förinställningar du just har installerat. Din .babelrc-fil ska se ut så här:

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

Steg 4: Konfigurera projektkatalogstrukturen

Ställ in en katalogstruktur som ser ut som nedan i roten till din katalog:

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

OBS: node_modules , .babelrc och package.json borde alla ha varit där från tidigare steg. Jag har bara inkluderat dem så att du kan se var de passar.

Steg 5: Populera projektet med Hello World-projektfilerna

Detta är inte riktigt viktigt för att bygga en pipeline så jag ska bara ge dig koden för dessa och du kan kopiera klistra in dem i:

src / komponenter / 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 / myImage.gif

Känn dig fri att ersätta detta med alla bilder du vill att det bara är där för att bevisa att vi också kan binda in bilder. Om du tillhandahåller din egen bild och namnger det något annorlunda måste du uppdatera HelloWorldComponent.jsx att återspegla dina ändringar. Lika om du väljer en bild med en annan filändelse måste du ändra test egenskap av bilden lastaren i webpack.config.js med lämplig regex att matcha din nya filändelsen ..

src / stilar / 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'));

Steg 6: Skapa webbpackskonfiguration

Skapa en fil som heter webpack.config.js i roten till ditt projekt och kopiera den här koden till den:

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;

Steg 7: Skapa npm-uppgifter för din pipeline

För att göra detta måste du lägga till två egenskaper till skriptnyckeln för JSON som definieras i package.json-filen i roten till ditt projekt. Få skriptnyckeln att se ut så här:

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

test har redan funnits och du kan välja om du vill behålla det eller inte, det är inte viktigt för det här exemplet.

Steg 8: Använd rörledningen

Från kommandoraden, om du är i projektrotkatalogen, bör du nu kunna köra kommandot:

npm run build

Detta kommer att samla den lilla applikationen du har byggt och placera den i dist/ katalogen som den kommer att skapa i roten till din projektmapp.

Om du kör kommandot:

npm start

Då kommer applikationen du har byggt upp att serveras i din standardwebbläsare i en webbpack-dev-instans.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow