Szukaj…


Uwagi

Ten potok kompilacji nie jest dokładnie tym, co nazwałbyś „gotowym do produkcji”, ale daje ci solidne podstawy do dodania do niego rzeczy, których potrzebujesz, aby uzyskać doświadczenie programistyczne, którego szukasz. Podejście, które niektórzy ludzie przyjmują (czasami czasami ja), polega na wzięciu w pełni rozbudowanego potoku Yeoman.io lub gdzieś indziej, a następnie rozebraniu rzeczy, których nie chcą, dopóki nie będzie to pasować do stylu. Nie ma w tym nic złego, ale być może w powyższym przykładzie możesz wybrać przeciwne podejście i zbudować z nagich kości.

Niektóre rzeczy, które możesz chcieć dodać, to np. Środowisko testowe i statystyki zasięgu, takie jak Karma z Mocha lub Jasmine. Szarpie z ESLint. Wymiana modułu na gorąco w webpack-dev-server, dzięki czemu można uzyskać doświadczenie programistyczne Ctrl + S, F5. Również bieżący potok buduje tylko w trybie deweloperskim, więc zadanie kompilacji produkcyjnej byłoby dobre.

Gotchas!

Zauważ, że we właściwości kontekstu webpack.config.js użyliśmy modułu ścieżki węzła, aby zdefiniować naszą ścieżkę, a nie tylko konkatenację __dirname do ciągu /src ponieważ system Windows nienawidzi cięć w przód . Aby uczynić to rozwiązanie bardziej kompatybilnym z wieloma platformami, skorzystaj z węzła dźwigni, aby nam pomóc.

Objaśnienie właściwości pliku webpack.config.js

kontekst

Jest to ścieżka do pliku, dla której webpack będzie używał jako ścieżki katalogu głównego do rozwiązywania względnych ścieżek plików. Tak więc w index.jsx, w którym używamy require('./index.html') ta kropka faktycznie przenosi się do katalogu src/ ponieważ tak zdefiniowaliśmy to w tej właściwości.

wejście

Tam, gdzie webpack wygląda na pierwszy, zaczyna wiązać rozwiązanie. Dlatego zobaczysz, że w pliku index.jsx łączymy rozwiązanie z wymaganiami i importami.

wynik

W tym miejscu określamy, gdzie webpack powinien upuszczać pliki, które znalazł w pakiecie. Zdefiniowaliśmy również nazwę pliku, w którym zostanie usunięty nasz pakiet javascript i style.

devServer

Są to ustawienia specyficzne dla serwera webpack-dev-server. contentBase określa miejsce, w którym serwer powinien być rootem, tutaj zdefiniowaliśmy folder dist/ jako naszą bazę. port to port, na którym serwer będzie hostowany. open służy do instruowania webpack-dev-server, aby otworzył dla ciebie twoją domyślną przeglądarkę po uruchomieniu serwera.

moduł> ładowarki

Definiuje to mapowanie do użycia przez webpack, dzięki czemu będzie wiedział, co zrobić, gdy znajdzie różne pliki. Właściwość test daje wyrażenie regularne dla pakietu WWW do określenia, czy powinien zastosować ten moduł, w większości przypadków dopasowujemy rozszerzenia plików. loader lub loaders należy podać nazwę modułu ładującego że chcielibyśmy użyć, aby załadować plik do WebPack i pozwól, że ładowarka dbać o powiązanie tego typu plików. W javascript znajduje się również właściwość query , która po prostu zapewnia ciąg zapytania do modułu ładującego, więc prawdopodobnie moglibyśmy również użyć właściwości zapytania w module ładującym HTML, gdybyśmy chcieli. To po prostu inny sposób robienia rzeczy.

Jak zbudować potok dla dostosowanego „Hello world” z obrazami.

Krok 1: Zainstaluj Node.js

Potok kompilacji, który będziesz budował, jest oparty na Node.js, więc najpierw musisz upewnić się, że masz go zainstalowaną. Aby uzyskać instrukcje na temat instalowania Node.js, możesz sprawdzić tutaj dokumenty SO

Krok 2: Zainicjuj swój projekt jako moduł węzła

Otwórz folder projektu w wierszu polecenia i użyj następującego polecenia:

npm init

Na potrzeby tego przykładu możesz przyjąć wartości domyślne lub jeśli chcesz uzyskać więcej informacji o tym, co to wszystko oznacza, możesz zapoznać się z tym dokumentem SO o konfiguracji konfiguracji pakietu.

Krok 3: Zainstaluj niezbędne pakiety npm

Uruchom następujące polecenie w wierszu polecenia, aby zainstalować pakiety niezbędne w tym przykładzie:

npm install --save react react-dom

Następnie dla zależności dev uruchom polecenie:

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

Wreszcie webpack i webpack-dev-server są rzeczami, które warto instalować globalnie, a nie jako zależność twojego projektu, jeśli wolisz dodać go jako zależność, to zadziała, ja nie. Oto polecenie do uruchomienia:

npm install --global webpack webpack-dev-server 

Krok 3: Dodaj plik .babelrc do katalogu głównego projektu

Spowoduje to skonfigurowanie babel do korzystania z właśnie zainstalowanych ustawień. Twój plik .babelrc powinien wyglądać następująco:

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

Krok 4: Skonfiguruj strukturę katalogu projektu

Skonfiguruj strukturę katalogów, która wygląda jak poniżej w katalogu głównym:

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

UWAGA: node_modules , .babelrc i package.json powinny już istnieć w poprzednich krokach, które właśnie zamieściłem, abyś mógł zobaczyć, gdzie pasują.

Krok 5: wypełnij projekt plikami projektu Hello World

Nie jest to tak naprawdę ważne w procesie budowania potoku, więc dam ci po prostu kod do nich i możesz je skopiować i wkleić:

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

Zastąp to dowolnym obrazem, który chcesz, aby po prostu udowodnić, że możemy również łączyć obrazy. Jeśli podasz własny obraz i nazwiesz go inaczej, musisz zaktualizować HelloWorldComponent.jsx aby odzwierciedlić zmiany. Podobnie jeśli wybierzesz obraz z innym rozszerzeniem pliku, musisz zmodyfikować właściwość test modułu ładującego obraz w pliku webpack.config.js za pomocą odpowiedniego wyrażenia regularnego w celu dopasowania do nowego rozszerzenia pliku.

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'));

Krok 6: Utwórz konfigurację pakietu internetowego

Utwórz plik o nazwie webpack.config.js w katalogu głównym projektu i skopiuj do niego ten kod:

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;

Krok 7: Utwórz zadania npm dla swojego potoku

Aby to zrobić, musisz dodać dwie właściwości do klucza skryptu JSON zdefiniowanego w pliku package.json w katalogu głównym projektu. Spraw, by klucz twoich skryptów wyglądał tak:

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

Skrypt test już tam był i możesz wybrać, czy chcesz go zachować, czy nie, w tym przykładzie nie jest ważne.

Krok 8: Użyj potoku

Z poziomu wiersza poleceń, jeśli jesteś w katalogu głównym projektu, powinieneś być teraz w stanie uruchomić polecenie:

npm run build

Spowoduje to spakowanie małej aplikacji, którą zbudowałeś i umieszczenie jej w katalogu dist/ , który utworzy w katalogu głównym twojego projektu.

Jeśli uruchomisz polecenie:

npm start

Następnie aplikacja, którą zbudujesz, będzie obsługiwana w domyślnej przeglądarce wewnątrz instancji serwera webpack.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow