Een reactieomgeving opzetten, deel 4

React is in het verleden al bekend omdat het moeilijk was om aan de slag te gaan met het maken van apps, omdat je echt moest weten hoe je build-tools handmatig moest configureren. Dit is zelfs voordat u een enkele regel met React-code schrijft.

De create-react-app tool helpt enorm met dit probleem omdat het iedereen in staat stelt om een ​​volledig werkende React-app te maken zonder dat je enige kennis nodig hebt over het configureren van de build-tools. De realiteit is dat create-react-app prima zal zijn voor de meeste apps, vooral als je nog niet bekend bent met Reageren.

Naarmate u meer ervaring opdoet met React, heeft u mogelijk bepaalde vereisten voor uw apps die aangepaste configuratie van de installatiebestanden nodig hebben. In dit geval moet u React-buildhulpprogramma's handmatig kunnen instellen, want create-react-app verbergt deze standaard van u.

In deze zelfstudie laat ik je zien hoe je een React-app instelt door handmatig bouwtools te configureren. Dit zal je hopelijk het vertrouwen geven om door te gaan en te experimenteren met complexere opstellingen.

Hoewel het in het begin misschien een beetje intimiderend lijkt, zult u genieten van alle voordelen van volledige controle over elke configuratie-instelling. En u kunt precies bepalen welke hulpprogramma's in uw app worden opgenomen, die kunnen variëren van project tot project. Met deze aanpak kunt u gemakkelijk nieuwbouwgereedschappen opnemen wanneer deze zich voordoen (wat ze vaak doen).

Ben je klaar om je eerste React-app helemaal vanaf nul te maken? Laten we het doen.

Maak de app-bestandsstructuur

Om te demonstreren hoe een React-app kan worden opgezet via handmatige configuratie van de build-tools, zullen we dezelfde, zeer eenvoudige, React-app bouwen van eerdere zelfstudies in deze reeks.

Begin met het maken van een map met de naam my-first-componenten-build, en open vervolgens een opdrachtregelvenster dat naar deze map verwijst.

Type npm init om een ​​te maken package.json het dossier. Dit bestand bevat alle informatie over de hulpmiddelen die zijn gebruikt om uw app te bouwen, plus bijbehorende instellingen. Accepteer alle standaardinstellingen en blijf gewoon slaan invoeren (ongeveer tien keer) tot het voltooid is.

Als u alle standaardinstellingen hebt geaccepteerd, package.json ziet er zo uit:

"naam": "my-first-components-build", "version": "1.0.0", "description": "", "main": "index.js", "scripts": "test" : "echo \" Fout: geen test opgegeven \ "&& exit 1", "author": "", "license": "ISC"

We moeten nu de React en ReactDOM scripts aan ons project toevoegen. We doen dit via npm, de pakketbeheerder voor Node.js.

Voer in dezelfde opdrachtregeldirectory het volgende in:

npm install - bewaar reactantie

Dit installeert zowel React en ReactDom, plus afhankelijkheden die door deze twee modules worden vereist. Je zult merken dat we nu een nieuwe hebben node_modules directory waaraan de modules zijn toegevoegd.

Als je de package.json bestand, een nieuw afhankelijkheden eigenschap is toegevoegd met informatie over de knoopmodules die we hebben geïnstalleerd.

"dependencies": "react": "^ 15.6.1", "react-dom": "^ 15.6.1"

Dit is gebeurd omdat we het hebben opgegeven --opslaan optie in onze npm installeren commando. Dit meldde npm dat we onze geïnstalleerde projectafhankelijkheden wilden bijhouden. Dit is belangrijk als we ons project willen delen.

Typisch, omdat de node_modules map is zo groot dat u niet wilt proberen dit direct te delen. In plaats daarvan deel je je project zonder de node_modules map. Wanneer iemand vervolgens uw project downloadt, hoeft u alleen maar te typen npm installeren om de setup rechtstreeks vanuit te dupliceren package.json.

Opmerking: In npm 5.x worden geïnstalleerde modules automatisch opgeslagen in package.json. U hoeft niet langer handmatig het --opslaan keuze.

Binnen in de my-first-componenten-build map, maak een nieuwe aan src map en voeg een toe index.js bestand naar het bestand. We komen hier later op terug omdat we onze React-app beginnen te maken, nadat we de projectinstellingenbestanden hebben geconfigureerd.

Voeg een index.html-bestand in dezelfde map toe met de volgende code:

    Handmatig een reactietoepassing maken met behulp van bouwhulpmiddelen   

We willen onze app kunnen samenstellen tot een enkel JavaScript-bestand en ook gebruik kunnen maken van JSX- en ES6-klassen en -modules. Om dit te doen, moeten we Webpack en Babel-modules via npm installeren.

Laten we eerst Babel installeren. Typ het volgende in het opdrachtregelvenster:

npm installeren --save-dev babel-core babel-loader babel-preset-env babel-preset-reageren

Hiermee worden alle modules geïnstalleerd die nodig zijn voor Babel om de ES6- en JSX-code te compileren met standaard JavaScript.

Laten we nu Webpack opnieuw installeren via de opdrachtregel:

npm install --save-dev html-webpack-plug-in webpack webpack-dev-server

Hiermee installeert u alle modules die nodig zijn voor Webpack, een lokale webserver, en stelt ons in staat om Webpack te leiden om een ​​dynamiek te creëren index.html bestand in de openbaar map gebaseerd op degene die we hebben toegevoegd aan de src map. We kunnen ook een dynamische verwijzing toevoegen naar het gebundelde JavaScript-bestand in het HTML-bestand elke keer dat de app wordt gebouwd.

Nadat deze nieuwe modules zijn geïnstalleerd, is uw package.json bestand ziet er nu als volgt uit:

"dependencies": "react": "^ 15.6.1", "react-dom": "^ 15.6.1", "devDependencies": "babel-core": "^ 6.25.0", "babel -loader ":" ^ 7.1.0 "," babel-preset-env ":" ^ 1.5.2 "," babel-preset-react ":" ^ 6.24.1 "," html-webpack-plugin ":" ^ 2.28.0 "," webpack ":" ^ 3.0.0 "," webpack-dev-server ":" ^ 2.5.0 "

Deze keer worden de afhankelijkheden van Webpack en Babel opgeslagen in package.json als dev-afhankelijkheden.

Dit betekent dat deze specifieke modules nodig zijn tijdens de ontwikkelingsfase (dat wil zeggen de build) van de app. Aan de andere kant zijn de afhankelijkheden (zoals React en ReactDOM) vereist tijdens runtime en worden deze dus direct meegenomen met onze aangepaste app-code.

Webpack-configuratie

Om Webpack onze app te laten bouwen en deze in een enkel bestand te bundelen, moeten we de instellingen configureren. Maak in uw hoofdmap van app-map webpack.config.js, die wordt gebruikt om de specifieke build-instellingen van Webpack op te slaan.

We hebben Webpack nodig om drie dingen te doen:

  • Compileer ES6 / JSX-code naar JavaScript (via Babel).
  • Bouw onze app en bundel in een enkel JavaScript-bestand.
  • Maak een index.html-bestand en voeg binnenin een verwijzing toe naar ons gebundelde JavaScript-bestand.

Binnen webpack.config.js, toevoegen:

var path = require ('path'); var HtmlWebpackPlugin = require ('html-webpack-plugin'); module.exports = entry: './src/index.js', output: path: path.resolve (__ dirname, 'public'), bestandsnaam: 'build.js', module: rules: [test : /\.(js)$/, gebruik: 'babel-loader'], plug-ins: [new HtmlWebpackPlugin (template: 'src / index.html')]

Maak je geen zorgen te veel over de syntaxis die hier wordt gebruikt; begrijp gewoon het overzicht van wat er aan de hand is.

Het enige wat we doen is een JavaScript-object exporteren met bepaalde eigenschappen die bepalen hoe Webpack onze app bouwt. De binnenkomst property specificeert het startpunt van onze React-app, namelijk index.js. Vervolgens de uitgang eigenschap definieert het uitvoerpad en de bestandsnaam van het gebundelde JavaScript-bestand.

Wat het bouwproces zelf betreft, willen we dat Webpack alle JavaScript-bestanden via de Babel-compiler doorgeeft om JSX / ES6 te transformeren naar standaard JavaScript. We doen dit via de module eigendom. Het specificeert eenvoudig een reguliere expressie die Babel-transformaties uitvoert enkel en alleen voor JavaScript-bestanden.

Om de Babel-installatie te voltooien, moeten we een vermelding toevoegen aan de package.json bestand om op te geven welke Babel-transformaties we willen uitvoeren op onze JavaScript-bestanden. Doe open package.json en voeg een toe Babel eigendom:

"babel": "presets": ["env", "react"],

Dit voert twee transformaties uit op elk JavaScript-bestand in ons project. De env transformatie converteert ES6 JavaScript naar standaard JavaScript dat compatibel is met alle browsers. En de Reageer transformatie zal de JSX-code compileren tot createElement () functieaanroepen, dat is volkomen geldig JavaScript.

Nu, terug naar onze webpack.config.js het dossier.

De laatste eigenschap die we hebben is plugins, die speciale bewerkingen bevat die we tijdens het bouwproces willen uitvoeren. In ons geval hebben we Webpack nodig om een index.html bestand met een verwijzing naar het gebundelde JavaScript-bestand. We geven ook een bestaande aan index.html bestand (het bestand dat we eerder hebben gemaakt) om als sjabloon te gebruiken om de uiteindelijke bundel te maken index.html het dossier.

Bouw en test

Laten we nu een toevoegen script eigendom aan package.json. Overigens kunt u zoveel scripts toevoegen als u maar wilt om verschillende taken uit te voeren. Voorlopig willen we gewoon Webpack kunnen draaien, dus in package.json verwijder de "test" script en vervang het door:

"scripts": "build": "webpack",,

Voordat we het buildproces testen, laten we een React-component toevoegen aan index.js dus we hebben iets te geven.

import Reageren, Component uit 'reageren'; import ReactDOM van 'react-dom'; class-app breidt component render () terug ( 

Hallo Wereld!

) ReactDOM.render ( , document.querySelector ('#app'));

Dit zou er nu heel vertrouwd uit moeten zien als je de vorige tutorials in deze serie hebt gevolgd. 

Voer vanaf de opdrachtregel het volgende uit:

npm run build

Na een tijdje zou u een nieuwe moeten zien openbaar map gemaakt binnen my-first-componenten-build, bevattende index.html en index.js. Doe open index.html om de uitvoer van onze React-app-test te zien.

U ziet dat het gebundelde JavaScript-bestand voor ons is toegevoegd en dat het testonderdeel wordt weergegeven in het juiste DOM-element.

Automatiseer het compilatieproces

Zodra u meerdere wijzigingen in uw app gaat aanbrengen, leert u snel dat het nogal vervelend is om een ​​bestand handmatig te bewerken, op te slaan, de opdracht build uit te voeren en vervolgens het browservenster opnieuw te laden om de wijzigingen te bekijken.

Gelukkig kunnen we de Webpack-miniserver die we eerder hebben geïnstalleerd gebruiken om dit proces te automatiseren. Voeg een tweede script toe aan package.json dus de eigenschap 'scripts' ziet er als volgt uit:

"scripts": "build": "webpack", "dev": "webpack-dev-server --open",

Nu uitvoeren:

npm run dev

Na een paar seconden ziet u een nieuw browsertabblad met uw web-app geopend. De URL verwijst nu naar een lokale server in plaats van naar een specifiek lokaal bestand te verwijzen. Breng een kleine wijziging aan index.js in de src map en opslaan. Merk op dat uw app vrijwel onmiddellijk in de browser wordt bijgewerkt om de nieuwe wijzigingen weer te geven.

Webpack controleert nu de bestanden in uw app op wijzigingen. Wanneer een wijziging wordt aangebracht en opgeslagen, zal Webpack uw app opnieuw compileren en automatisch het browservenster opnieuw laden met de nieuwe updates.

Opmerking: de Webpack-server herbouwt uw app niet als zodanig, maar slaat veranderingen in een cache op, waardoor hij de browser zo snel kan bijwerken. Dit betekent dat u de updates niet ziet weerspiegeld in de openbaar map. In feite kunt u deze map volledig verwijderen wanneer u de Webpack-server gebruikt.

Wanneer u uw app moet bouwen, kunt u deze gewoon uitvoeren npm run build om de te maken openbaar map opnieuw (indien nodig) en voer uw app-bestanden uit, klaar voor verspreiding.

Onze app afmaken

Laten we voor de volledigheid de twee eenvoudige componenten toevoegen die we in eerdere zelfstudies hebben gebruikt.

Voeg twee nieuwe bestanden toe in de hoofdmap projectmap genaamd MyFirstComponent.js en MySecondComponent.js naar de hoofdmap van de app. In MyFirstComponent.js, voeg de volgende code toe:

import Reageren, Component uit 'reageren'; class MyFirstComponent breidt Component render () return uit ( 

this.props.number: Hello from React!

) export standaard MyFirstComponent;

En in MySecondComponent.js, toevoegen:

import Reageren, Component uit 'reageren'; class MySecondComponent breidt Component render () return uit ( 

this.props.number: mijn tweede reactiecomponent.

) export standaard MySecondComponent;

Gebruik deze update om deze componenten in onze app te gebruiken index.js Naar het volgende:

import Reageren, Component uit 'reageren'; import ReactDOM van 'react-dom'; importeer MyFirstComponent van './MyFirstComponent'; importeer MySecondComponent van './ MySecondComponent'; class-app breidt component render () terug ( 

Mijn eerste componenten reageren!

) ReactDOM.render ( , document.querySelector ('#app'));

Dit resulteert in dezelfde uitvoer als we eerder hebben gezien, behalve deze keer door de React-app 100% handmatig in te stellen.


Herbruikbare React-instellingssjablonen

Zodra u eenmaal deze handmatige configuratie hebt doorlopen en configuratie-configuratiebestanden hebt gemaakt, is dit de enige keer dat u dit helemaal opnieuw moet doen. Voor toekomstige projecten kunt u een of meer van uw bestaande setup-bestanden opnieuw gebruiken, waardoor latere React-projecten veel sneller kunnen worden opgezet.

Je zou zelfs een set van speciaal gebouwde React-startersjablonen kunnen maken en deze op GitHub kunnen hosten. Het zou dan een eenvoudig geval zijn van het klonen van een startersproject en het draaien npm init om de vereiste Node.js-modules te installeren.

Download en installeer het project

Het React-project voor deze tutorial is beschikbaar om te downloaden, zodat je ermee kunt spelen of het als een sjabloon voor nieuwe projecten kunt gebruiken.

Klik op de Bijlage downloaden link in de rechterzijbalk om toegang te krijgen tot het .zip-bestand van het project. Eenmaal gedownload, extraheer het en open een opdrachtregelvenster. Zorg ervoor dat je in de my-first-componenten-build directory.

Voer de volgende opdrachten in om de React-app te installeren en te compileren.

npm installeer npm run dev

De eerste opdracht zal alle Node.js-modules downloaden die nodig zijn voor het project, wat een minuut of twee zal duren. De tweede opdracht compileert de React-app en voert de mini-webserver uit en geeft deze weer in de browser.

Probeer enkele wijzigingen aan te brengen in uw React-app. Telkens wanneer u wijzigingen opslaat, wordt uw app opnieuw gecompileerd en wordt het browservenster automatisch bijgewerkt om de nieuwe versie van uw app weer te geven.

Wanneer u uw project wilt bouwen voor distributie, voert u gewoon de volgende opdracht uit.

npm run build

Conclusie

In deze zelfstudieserie hebben we gekeken naar verschillende manieren waarop u React-apps kunt instellen, waarbij elke stap steeds meer insteltaken vereist. Maar het voordeel op de lange termijn is dat u veel meer controle en flexibiliteit hebt over hoe het project precies is opgezet.

Als je eenmaal bent begonnen met het opzetten van React, denk ik dat je het ontwikkelen van apps erg leuk zult vinden. Ik zou graag uw opmerkingen horen. Laat me weten wat je van plan bent om te gaan bouwen met React!