### Platform Support
The following shows module APIs available for each platform.
| | Linux
(Ubuntu) | Tizen
(Raspberry Pi) | Raspbian
(Raspberry Pi) | NuttX
(STM32F4-Discovery) | TizenRT
(Artik053) |
| :---: | :---: | :---: | :---: | :---: | :---: |
| require | O | O | O | O | O |
# Module
The `require` function is always available there is no need to import `module` explicitly.
### require(id)
* `id` {string} Module name to be loaded.
Loads the module named `id`.
**Example**
```js
var assert = require('assert');
assert.equal(2, 2);
```
**Loading a module**
If a native module named `id` exists, load it and return.
(_Native module:_ which module came from the IoT.js itself)
`require` function searches for modules in the following order:
1. Current working directory.
2. `iotjs_modules` folder under current working directory.
3. `$HOME/iotjs_modules`
4. `$IOTJS_PATH/iotjs_modules`
5. `$IOTJS_EXTRA_MODULE_PATH`
For each directory in search paths above:
- If a file `id` exists, load it and return.
- If a file `id.js` exists, load it and retun.
- If a directory `id` exists, module system consider the directory as a package:
- If `id/package.json` contains **main** property, load the file named **main** property.
- If `id/package.json` exists, but neither the **main** property nor the file named **main** property exist, load `index.js`.
- Extra step for Linux/Tizen targets:
- If a file with `id.node` exists, try to load it as an N-API native addon and return.
**Changing current working directory**
You can explicitly change current working directory by setting `IOTJS_WORKING_DIR_PATH` environment variable. It is not recommended that you set this variable, if possible.
**Adding extra paths for module loading**
In order to add more directories to look for modules, you can set `IOTJS_EXTRA_MODULE_PATH` as an environment variable of your system. For instance, `./node_modules` and `./my_modules` will be referred if they're declared as follows.
`IOTJS_EXTRA_MODULE_PATH=./node_modules:./my_modules`