# Modules + Webpack
### `main.js`
```jsx
// main.js
const button = document.getElementById('button');
button.addEventListener('click', function(e) {
click();
})
```
### `game.js`
```jsx
let numTimesClicked = 0;
let prizes = ['Zoyru Plush', 'Pikachu Plush', 'Reebok Pumps', 'Lifetime Supply of 25c Barrel Drinks', 'Lifetime Supply of Dunkaroos']
let prizeList = document.getElementById('prizes-list')
function win() {
alert(`You win!`);
prizes.forEach(prize => {
let node = document.createElement('li')
node.innerHTML = prize
prizeList.append(node)
})
reset();
}
function reset() {
numTimesClicked = 0;
}
function click() {
numTimesClicked++;
console.log(numTimesClicked)
if( numTimesClicked === 10 ) win();
}
```
### Add scripts to HTML
```jsx
<script type="text/javascript" src="src/main.js"></script>
<script type="text/javascript" src="src/game.js"></script>
```
## What is wrong with above?
Everything is in the global scope. I have access to everything.
## `module.exports` and `require` don't work here. Why? Because we are on the frontend.
## A better way to above and being able to use `module.exports`: Using `webpack`
Webpack is a module bundler. It packages many different JavaScript modules (files) into a JavaScript file to be executed in the browser.
### Install `webpack`
```jsx
npm i webpack
npm i webpack-cli
```
### Comment out these lines in `index.html`
```html
<script type="text/javascript" src="src/main.js"></script>
<script type="text/javascript" src="src/game.js"></script>
```
### Create a `webpack.config.js`
```jsx
module.exports = {
mode: "development",
entry: "./src/main.js",
output: {
path: __dirname + "/public",
filename: "bundle.js"
}
}
```
### Create a script in `package.json`
```jsx
"build": "webpack -w"
```
### Include `bundle.js` in the HTML file
```jsx
<script type="text/javascript" src="public/bundle.js" defer></script>
```
### Now we can try to do `module.exports` and `require`
### Export `click` function from `game.js`
```jsx
//module.exports = click;
export click
```
### `require` `click` function in `main.js`
```jsx
//const click = require('./game');
import click from './game'
```