Recherche…


Remarques

Ce pipeline de construction n'est pas exactement ce que vous qualifieriez de «prêt à la production», mais il vous permet de commencer à ajouter les éléments dont vous avez besoin pour obtenir l'expérience de développement que vous recherchez. L'approche que certaines personnes adoptent (y compris moi-même parfois) est de prendre un pipeline entièrement construit de Yeoman.io ou quelque part ailleurs, puis de retirer les choses qu'ils ne veulent pas jusqu'à ce que cela leur convienne. Il n'y a rien de mal à cela, mais peut-être avec l'exemple ci-dessus, vous pouvez opter pour l'approche opposée et construire à partir de rien.

Certaines choses que vous aimeriez ajouter sont des choses comme un cadre de test et des statistiques de couverture comme Karma avec Moka ou Jasmine. Linting avec ESLint. Hot module de remplacement dans webpack-dev-server afin que vous puissiez obtenir cette expérience de développement Ctrl + S, F5. De plus, le pipeline actuel ne construit qu'en mode dev, donc une tâche de construction de production serait bien.

Gotchas!

Remarquez que dans la propriété context du webpack.config.js nous avons utilisé le module de chemin de noeud pour définir notre chemin plutôt que de simplement concaténer __dirname avec la chaîne /src car Windows déteste les slashs avant . Donc, pour rendre la solution plus multi-plate-forme compatible utiliser le noeud de levier pour nous aider.

Explication des propriétés webpack.config.js

le contexte

Il s'agit du chemin de fichier que webpack utilisera comme chemin racine pour résoudre les chemins de fichiers relatifs. Donc, dans index.jsx où nous utilisons require('./index.html') ce point est résolu dans le répertoire src/ car nous l'avons défini comme tel dans cette propriété.

entrée

Où webpack cherche d'abord à regrouper la solution. C'est pourquoi vous verrez que dans index.jsx, nous assemblons la solution avec les exigences et les importations.

sortie

C'est là que nous définissons où webpack devrait déposer les fichiers qu'il a trouvés. Nous avons également défini un nom pour le fichier dans lequel nos javascript et styles fournis seront supprimés.

devServer

Ce sont des paramètres spécifiques à webpack-dev-server. contentBase définit où le serveur doit créer sa racine, nous avons défini le dossier dist/ comme base ici. Le port est le port sur lequel le serveur sera hébergé. open est ce qui est utilisé pour demander à webpack-dev-server d'ouvrir votre navigateur par défaut une fois qu'il est mis en place sur le serveur.

module> chargeurs

Ceci définit un mappage à utiliser pour Webpack afin de savoir quoi faire quand il trouve des fichiers différents. La propriété test donne une expression rationnelle que webpack doit utiliser pour déterminer si elle doit appliquer ce module. Dans la plupart des cas, nous avons mis en correspondance les extensions de fichier. loader ou loaders donne le nom du module de chargement que nous aimerions utiliser pour charger le fichier dans webpack et laisser ce chargeur s'occuper du regroupement de ce type de fichier. Il y a aussi une propriété de query sur le javascript, cela fournit juste une chaîne de requête au chargeur, donc nous aurions probablement pu utiliser une propriété de requête sur le chargeur html si nous le voulions. C'est juste une façon différente de faire les choses.

Comment construire un pipeline pour un "Hello world" personnalisé avec des images.

Étape 1: Installez Node.js

Le pipeline de génération que vous allez créer est basé sur Node.js, vous devez donc vous assurer que vous l'avez installé en premier lieu. Pour obtenir des instructions sur l'installation de Node.js, vous pouvez consulter les documents SO pour cela ici.

Etape 2: Initialisez votre projet en tant que module de noeud

Ouvrez votre dossier de projet sur la ligne de commande et utilisez la commande suivante:

npm init

Pour les besoins de cet exemple, vous pouvez prendre les paramètres par défaut ou si vous souhaitez plus d’informations sur ce que tout cela signifie, vous pouvez consulter cette documentation sur la configuration du package.

Étape 3: Installer les paquetages npm nécessaires

Exécutez la commande suivante sur la ligne de commande pour installer les packages nécessaires pour cet exemple:

npm install --save react react-dom

Ensuite, pour les dépendances de développement, exécutez cette commande:

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

Enfin, webpack et webpack-dev-server sont des éléments qui valent la peine d'être installés globalement plutôt que comme une dépendance de votre projet. Si vous préférez les ajouter en tant que dépendance, cela ne fonctionnera pas. Voici la commande à exécuter:

npm install --global webpack webpack-dev-server 

Étape 3: Ajouter un fichier .babelrc à la racine de votre projet

Cela permettra à babel d'utiliser les préréglages que vous venez d'installer. Votre fichier .babelrc doit ressembler à ceci:

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

Étape 4: Configurer la structure du répertoire du projet

Configurez-vous une structure de répertoire qui ressemble à la suivante dans la racine de votre répertoire:

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

REMARQUE: Les node_modules , .babelrc et package.json devraient tous être déjà présents depuis les étapes précédentes. Je les ai simplement inclus pour que vous puissiez voir où ils correspondent.

Étape 5: Remplissez le projet avec les fichiers de projet Hello World

Ce n'est pas vraiment important pour le processus de construction d'un pipeline, alors je vais simplement vous donner le code et vous pouvez les copier dans:

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

N'hésitez pas à substituer ceci à n'importe quelle image que vous souhaitez, simplement pour prouver que nous pouvons regrouper des images. Si vous fournissez votre propre image et que vous la nommez autrement, vous devrez mettre à jour HelloWorldComponent.jsx pour refléter vos modifications. De même, si vous choisissez une image avec une extension de fichier différente, vous devez modifier la propriété de test du chargeur d'image dans le fichier webpack.config.js avec une expression régulière appropriée pour correspondre à votre nouvelle extension de fichier.

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

Étape 6: Créer une configuration Webpack

Créez un fichier appelé webpack.config.js à la racine de votre projet et copiez ce code dans celui-ci:

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;

Étape 7: Créez des tâches npm pour votre pipeline

Pour ce faire, vous devez ajouter deux propriétés à la clé de script du JSON définie dans le fichier package.json à la racine de votre projet. Faites en sorte que votre clé de script ressemble à ceci:

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

Le script de test aura déjà été là et vous pouvez choisir de le conserver ou non, ce n'est pas important pour cet exemple.

Étape 8: utiliser le pipeline

Depuis la ligne de commande, si vous êtes dans le répertoire racine du projet, vous devriez maintenant pouvoir exécuter la commande:

npm run build

Cela regroupera la petite application que vous avez créée et la placera dans le répertoire dist/ qu'il créera à la racine du dossier de votre projet.

Si vous exécutez la commande:

npm start

Ensuite, l'application que vous avez créée sera servie dans votre navigateur Web par défaut à l'intérieur d'une instance de serveur de développement Web.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow