# 13: Modules

In Exercise 10 and Exercise 12 you used `const fs = require('fs')` to use the "file system (fs)" module. A module is just a way to add a feature, or capability, to your own code. Usually a module is code someone else wrote that you want to use, like the `fs` module. In this exercise you'll learn how to create your own module and require it. Doing this will teach you more about how modules and `require` works.

For this exercise you will make two files: code.js and geometry.js. You'll put both files in the same directory so that you can access them. To test that you've done this right, type `cat code.js` then `cat geometry.js` to view the two files. If you don't see both, then you did it wrong.

## The Geometry Code

The first file you'll make is `geometry.js`, and it contains the following code:

``````const area = (r) => Math.PI * r ** 2;
const circumference = (r) => 2 * Math.PI * r;

module.exports = {
area: area,
circumference: circumference
}
``````

In this code you create two functions for `area` and `circumference` calculations. After that we use the `module.exports` variable to register these two functions. The syntax you see of `{ }` starts an "object" in JavaScript which is a container using named value, or key and value, pairs. On the left is the key, and on the right is the value.

In our case the key is just the name of the function again, and the value is the actual function we created previously. Why do we do this? Every module system needs a way to tell the computer what is accessible to people who use the module. In some languages (like Python) it's everything. In JavaScript you have to explicitly say what is accessible. You do this by setting `module.exports` to an object which lists out what you are "exporting".

## The Require Code

Once you have the `geometry.js` written you now need to create this in `code.js`:

``````const geometry = require('./geometry');

let area51 = geometry.area(2.8);
let circ2 = geometry.circumference(6);

console.log(`Area: \${area51}, Circumference: \${circ2}`);
``````

You'll see that this code requires your `geometry.js` file, but it uses the syntax `require ('./geometry')`, so pay attention. See the `./geometry` where I have `./` at the beginning? That's a commmon way to say "in the current directory," so we're saying "require the geometry module that's in the current directory". Next, notice I didn't put `.js` at the end? That's not necessary, as Node assumes you mean a file called `geometry.js`, and adding it will keep you from later turning your `geometry.js` into a directory that has the module.

## What You Should See

Running the code should look like this:

``````\$ node "code.js"
Area: 24.630086404143974, Circumference: 37.69911184307752
``````

There isn't anything special about this, as it's just loading the geometry code and using it. The complexity is all in how you're using more than one file. As you write more JavaScript you'll have to begin to deal with this kind of complexity, so spend some time understanding this. Definitely watch the video for this exercise.

## A Note On Browsers

All of this talk of modules doesn't quite apply to web browsers. In a web browser you usually "require" a JavaScript module by just using the `<script>` tag, or you can use various systems that will let you use `require`.

## Learn JavaScript Today

Register today for the Early Access course and get the all currently available videos and lessons, plus all future modules for no extra charge.

Still Not Sure? Try the next FREE Lesson!