# CloudCode Dependencies

### Defaults

A few Node.js packages are included by default in every CloudCode task. This includes:

* `aws-sdk`
* `node-fetch` (exposed as a fetch global function)

Additional Node.js dependencies can be added to a task or managed via OXIDE. See the following section for details:

{% content-ref url="../../oxide/editing-and-managing-files/managing-external-dependencies" %}
[managing-external-dependencies](https://docs.journeyapps.com/reference/oxide/editing-and-managing-files/managing-external-dependencies)
{% endcontent-ref %}

### Private NPM Packages

CloudCode supports the addition of private NPM packages to be used in tasks. To do this, you need to:

1. Update the task's `package.json` file with the relevant details for the private package you are using.
2. Add an access token for your org in the task's `.npmrc` file. To do this, open the task's `.npmrc` file and add this line: `//registry.npmjs.org/:_authToken=$NPM_TOKEN` - where $NPM\_TOKEN is your NPM user's access token.
3. Update the `yarn.lock` file (right-click on the CloudCode task in OXIDE or use the command palette).

### Using dependencies

Once dependencies are added to the task, they can be imported and used in the task:

```javascript
import * as Rollbar from 'rollbar';
const rollbar = new Rollbar({
  accessToken: process.env.POST_SERVER_ITEM_ACCESS_TOKEN,
  captureUncaught: true,
  captureUnhandledRejections: true
}); // Read more about process.env in our Enviroment variable docs.

export async function run() {
  try {
    let res = await fetch('https://www.journeyapps.com')
    if (res.ok) {
      rollbar.info("Fetched www.journeyapps.com");
    } else {
      throw new Error(`request to https://www.journeyapps.com failed, reason: ${res.status} ${res.statusText}`);
    }
  } catch (err) {
    rollbar.error(`Unable to fetch https://www.journeyapps.com got '${err.message}'`, err);
  }
}
```
