|
| 1 | +<!DOCTYPE html> |
| 2 | +<html> |
| 3 | + |
| 4 | + <head> |
| 5 | + <meta charset='utf-8'> |
| 6 | + <meta http-equiv="X-UA-Compatible" content="chrome=1"> |
| 7 | + <meta name="description" content="React Webpack Tutorial : This is a tutorial for how to get started developing a client side application using ReactJS, Webpack and Npm"> |
| 8 | + |
| 9 | + <link rel="stylesheet" type="text/css" media="screen" href="stylesheets/stylesheet.css"> |
| 10 | + |
| 11 | + <title>React Webpack Tutorial</title> |
| 12 | + </head> |
| 13 | + |
| 14 | + <body> |
| 15 | + |
| 16 | + <!-- HEADER --> |
| 17 | + <div id="header_wrap" class="outer"> |
| 18 | + <header class="inner"> |
| 19 | + <a id="forkme_banner" href="https://github.com/jansoren/react-webpack-tutorial">View on GitHub</a> |
| 20 | + |
| 21 | + <h1 id="project_title">React Webpack Tutorial</h1> |
| 22 | + <h2 id="project_tagline">This is a tutorial for how to get started developing a client side application using ReactJS, Webpack and Npm</h2> |
| 23 | + |
| 24 | + <section id="downloads"> |
| 25 | + <a class="zip_download_link" href="https://github.com/jansoren/react-webpack-tutorial/zipball/master">Download this project as a .zip file</a> |
| 26 | + <a class="tar_download_link" href="https://github.com/jansoren/react-webpack-tutorial/tarball/master">Download this project as a tar.gz file</a> |
| 27 | + </section> |
| 28 | + </header> |
| 29 | + </div> |
| 30 | + |
| 31 | + <!-- MAIN CONTENT --> |
| 32 | + <div id="main_content_wrap" class="outer"> |
| 33 | + <section id="main_content" class="inner"> |
| 34 | + <h1> |
| 35 | +<a id="react-webpack-tutorial" class="anchor" href="#react-webpack-tutorial" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>React Webpack Tutorial</h1> |
| 36 | + |
| 37 | +<p>This tutorial will cover how to get started developing a client side application using these technologies:</p> |
| 38 | + |
| 39 | +<ul> |
| 40 | +<li><a href="https://facebook.github.io/react/">ReactJS</a></li> |
| 41 | +<li><a href="https://webpack.github.io/">Webpack</a></li> |
| 42 | +<li><a href="https://docs.npmjs.com/getting-started/what-is-npm">Npm</a></li> |
| 43 | +</ul> |
| 44 | + |
| 45 | +<p>You can either follow the tutorial below or just jump to the resulting code with:</p> |
| 46 | + |
| 47 | +<ol> |
| 48 | +<li>Cloning this repo <code>git clone git@github.com:jansoren/react-webpack-tutorial.git</code> |
| 49 | +</li> |
| 50 | +<li>Run <code>npm install</code> from the <a href="/myapp">myapp</a>-folder</li> |
| 51 | +<li>Run command <code>webpack</code> |
| 52 | +</li> |
| 53 | +<li>Open <code>/myapp/dist/index.html</code> |
| 54 | +</li> |
| 55 | +</ol> |
| 56 | + |
| 57 | +<p>If you find the tutorial helpful, and maybe learned something new, please give it a star. If you have improvement suggestions please create an issue or a pull request. Enjoy :-)</p> |
| 58 | + |
| 59 | +<h2> |
| 60 | +<a id="tutorial-prerequisites" class="anchor" href="#tutorial-prerequisites" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Tutorial prerequisites</h2> |
| 61 | + |
| 62 | +<ul> |
| 63 | +<li>Use your preferred IDE or you can install <a href="https://atom.io/">Atom</a> |
| 64 | +</li> |
| 65 | +<li>Install <a href="https://nodejs.org/en/download/">NodeJS</a> |
| 66 | +</li> |
| 67 | +<li>Install <a href="https://webpack.github.io/">Webpack</a> - <code>npm install -g webpack</code> |
| 68 | +</li> |
| 69 | +</ul> |
| 70 | + |
| 71 | +<h3> |
| 72 | +<a id="1-initializing-your-project-with-npm" class="anchor" href="#1-initializing-your-project-with-npm" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>1. Initializing your project with npm</h3> |
| 73 | + |
| 74 | +<ol> |
| 75 | +<li>Enter your project main folder. For this tutorial I will use <a href="/myapp">myapp</a> as folder and you will find the resulting code there</li> |
| 76 | +<li>Run <code>npm init</code> to create the project <code>package.json</code> file</li> |
| 77 | +<li>Press on the npm init questions to get the default value</li> |
| 78 | +<li>Install Webpack with <code>npm install --save-dev webpack</code>. When npm uses <code>--save-dev</code> it automatically adds the webpack package to the <code>package.json</code> |
| 79 | +</li> |
| 80 | +</ol> |
| 81 | + |
| 82 | +<p>You have now created an initial <a href="/myapp/package.json">package.json</a> file that we later on will fill with the necessary packages for installing the application with <code>npm install</code>.</p> |
| 83 | + |
| 84 | +<h3> |
| 85 | +<a id="2-create-initial-application-files" class="anchor" href="#2-create-initial-application-files" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>2. Create initial application files</h3> |
| 86 | + |
| 87 | +<ol> |
| 88 | +<li>Open <a href="/myapp">myapp</a>-folder in your preferred IDE or <a href="https://atom.io/">Atom</a> |
| 89 | +</li> |
| 90 | +<li> |
| 91 | +<p>Create your application Webpack config file <a href="/myapp/webpack.config.js">webpack.config.js</a> in main project folder with this initial content:</p> |
| 92 | + |
| 93 | +<div class="highlight highlight-source-js"><pre><span class="pl-k">var</span> config <span class="pl-k">=</span> { |
| 94 | + context<span class="pl-k">:</span> <span class="pl-c1">__dirname</span> <span class="pl-k">+</span> <span class="pl-s"><span class="pl-pds">"</span>/app<span class="pl-pds">"</span></span>, |
| 95 | + entry<span class="pl-k">:</span> <span class="pl-s"><span class="pl-pds">"</span>./main.js<span class="pl-pds">"</span></span>, |
| 96 | + |
| 97 | + output<span class="pl-k">:</span> { |
| 98 | + filename<span class="pl-k">:</span> <span class="pl-s"><span class="pl-pds">"</span>bundle.js<span class="pl-pds">"</span></span>, |
| 99 | + path<span class="pl-k">:</span> <span class="pl-c1">__dirname</span> <span class="pl-k">+</span> <span class="pl-s"><span class="pl-pds">"</span>/dist<span class="pl-pds">"</span></span>, |
| 100 | + }, |
| 101 | +}; |
| 102 | +<span class="pl-smi">module</span>.<span class="pl-smi">exports</span> <span class="pl-k">=</span> config;</pre></div> |
| 103 | +</li> |
| 104 | +<li><p>Create folder <a href="/myapp/app">myapp/app</a> to contain all your application files.</p></li> |
| 105 | +<li> |
| 106 | +<p>Create your application main file <a href="/myapp/app/main.js">main.js</a> with this initial content:</p> |
| 107 | + |
| 108 | +<div class="highlight highlight-source-js"><pre><span class="pl-k">var</span> React <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>react<span class="pl-pds">'</span></span>); |
| 109 | +<span class="pl-k">var</span> ReactDOM <span class="pl-k">=</span> <span class="pl-c1">require</span>(<span class="pl-s"><span class="pl-pds">'</span>react-dom<span class="pl-pds">'</span></span>); |
| 110 | + |
| 111 | +<span class="pl-k">var</span> Content <span class="pl-k">=</span> <span class="pl-smi">React</span>.<span class="pl-en">createClass</span>({ |
| 112 | + <span class="pl-en">render</span><span class="pl-k">:</span> <span class="pl-k">function</span>() { |
| 113 | + <span class="pl-k">return</span> ( |
| 114 | + <span class="pl-k"><</span>div<span class="pl-k">></span> |
| 115 | + <span class="pl-k"><</span>b<span class="pl-k">></span>Congratulations<span class="pl-k"><</span><span class="pl-k">/</span>b<span class="pl-k">></span>, you are now ready to implement your client side application<span class="pl-k">!</span> Enjoy <span class="pl-k">:-</span>) |
| 116 | + <span class="pl-k"><</span><span class="pl-k">/</span>div<span class="pl-k">></span> |
| 117 | + ); |
| 118 | + } |
| 119 | +}); |
| 120 | +<span class="pl-smi">ReactDOM</span>.<span class="pl-en">render</span>(<span class="pl-k"><</span>Content <span class="pl-k">/</span><span class="pl-k">></span>, <span class="pl-smi">document</span>.<span class="pl-c1">getElementById</span>(<span class="pl-s"><span class="pl-pds">'</span>content<span class="pl-pds">'</span></span>));</pre></div> |
| 121 | +</li> |
| 122 | +<li><p>Install React DOM and add it to your package.json file automatically using <code>npm install --save react react-dom</code></p></li> |
| 123 | +<li>Install Babel to transform the content of a .js file from ES6 to ES5 <code>npm install --save-dev babel-preset-react babel-preset-es2015 babel-loader</code> |
| 124 | +</li> |
| 125 | +<li> |
| 126 | +<p>In your <code>webpack.config.js</code> add the babel-loader that you just installed like this:</p> |
| 127 | + |
| 128 | +<div class="highlight highlight-source-js"><pre><span class="pl-k">var</span> config <span class="pl-k">=</span> { |
| 129 | + <span class="pl-k">...</span> |
| 130 | + module<span class="pl-k">:</span> { |
| 131 | + loaders<span class="pl-k">:</span> [ |
| 132 | + { |
| 133 | + test<span class="pl-k">:</span><span class="pl-sr"> <span class="pl-pds">/</span><span class="pl-cce">\.</span>js<span class="pl-k">$</span><span class="pl-pds">/</span></span>, |
| 134 | + exclude<span class="pl-k">:</span><span class="pl-sr"> <span class="pl-pds">/</span>node_modules<span class="pl-pds">/</span></span>, |
| 135 | + loader<span class="pl-k">:</span> <span class="pl-s"><span class="pl-pds">'</span>babel-loader<span class="pl-pds">'</span></span>, |
| 136 | + query<span class="pl-k">:</span> { |
| 137 | + presets<span class="pl-k">:</span> [<span class="pl-s"><span class="pl-pds">'</span>react<span class="pl-pds">'</span></span>, <span class="pl-s"><span class="pl-pds">'</span>es2015<span class="pl-pds">'</span></span>] |
| 138 | + } |
| 139 | + } |
| 140 | + ], |
| 141 | + }, |
| 142 | +};</pre></div> |
| 143 | +</li> |
| 144 | +<li> |
| 145 | +<p>Create folder <a href="/myapp/dist">myapp/dist</a> and create <code>index.html</code> file with content:</p> |
| 146 | + |
| 147 | +<div class="highlight highlight-text-html-basic"><pre><!DOCTYPE html> |
| 148 | +<<span class="pl-ent">html</span>> |
| 149 | + <<span class="pl-ent">head</span>> |
| 150 | + <<span class="pl-ent">meta</span> <span class="pl-e">charset</span>=<span class="pl-s"><span class="pl-pds">"</span>UTF-8<span class="pl-pds">"</span></span> /> |
| 151 | + <<span class="pl-ent">title</span>>Hello React Webpack Tutorial!</<span class="pl-ent">title</span>> |
| 152 | + </<span class="pl-ent">head</span>> |
| 153 | + <<span class="pl-ent">body</span>> |
| 154 | + <<span class="pl-ent">div</span> <span class="pl-e">id</span>=<span class="pl-s"><span class="pl-pds">"</span>content<span class="pl-pds">"</span></span>></<span class="pl-ent">div</span>> |
| 155 | +<span class="pl-s1"> <<span class="pl-ent">script</span> <span class="pl-e">src</span>=<span class="pl-s"><span class="pl-pds">"</span>bundle.js<span class="pl-pds">"</span></span>></<span class="pl-ent">script</span>></span> |
| 156 | + </<span class="pl-ent">body</span>> |
| 157 | +</<span class="pl-ent">html</span>></pre></div> |
| 158 | +</li> |
| 159 | +<li> |
| 160 | +<p>Run command <code>webpack</code> in your main folder that will result in something like this:</p> |
| 161 | + |
| 162 | +<pre><code>Hash: dd141258ef660950584c |
| 163 | +Version: webpack 1.12.11 |
| 164 | +Time: 3711ms |
| 165 | + Asset Size Chunks Chunk Names |
| 166 | +bundle.js 676 kB 0 [emitted] main |
| 167 | + + 159 hidden modules |
| 168 | +</code></pre> |
| 169 | +</li> |
| 170 | +<li><p>Open <code>/dist/index.html</code> to see your client side application</p></li> |
| 171 | +<li> |
| 172 | +<p>If you want some pointers on developing your client side application you should check these sites out:</p> |
| 173 | + |
| 174 | +<ul> |
| 175 | +<li><a href="https://facebook.github.io/react/docs/thinking-in-react.html">Thinking in React</a></li> |
| 176 | +<li><a href="https://blog.risingstack.com/react-js-best-practices-for-2016/">React.js Best Practices for 2016</a></li> |
| 177 | +</ul> |
| 178 | +</li> |
| 179 | +</ol> |
| 180 | + </section> |
| 181 | + </div> |
| 182 | + |
| 183 | + <!-- FOOTER --> |
| 184 | + <div id="footer_wrap" class="outer"> |
| 185 | + <footer class="inner"> |
| 186 | + <p class="copyright">React Webpack Tutorial maintained by <a href="https://github.com/jansoren">jansoren</a></p> |
| 187 | + <p>Published with <a href="https://pages.github.com">GitHub Pages</a></p> |
| 188 | + </footer> |
| 189 | + </div> |
| 190 | + |
| 191 | + |
| 192 | + |
| 193 | + </body> |
| 194 | +</html> |
0 commit comments