---
title: "ESM (MJS)"
description: "Learn about running Sentry in an ESM application."
url: https://docs.sentry.io/platforms/javascript/guides/nestjs/install/esm/
---

# ESM (MJS) | Sentry for Nest.js

Are you unsure if you should use this installation method? Review our [installation methods](https://docs.sentry.io/platforms/javascript/guides/nestjs/install.md).

When running your application in [ECMAScript Modules](https://nodejs.org/api/esm.html#introduction) (ESM) mode, you can't use `require()` to load modules. Instead, you have to use the `--import` command line options to load a module before the application starts.

**Step 1:** Create a file named `instrument.mjs` that imports and initializes Sentry:

`instrument.mjs`

```javascript
import * as Sentry from "@sentry/nestjs";

// Ensure to call this before importing any other modules!
Sentry.init({
  dsn: "___PUBLIC_DSN___",

  // Add Tracing by setting tracesSampleRate
  // We recommend adjusting this value in production
  tracesSampleRate: 1.0,
});
```

**Step 2:** Adjust your application's start command to use the [--import](https://nodejs.org/api/cli.html#--importmodule) parameter:

```bash
# Note: This is only available for Node v18.19.0 onwards.
"start": "--import ./instrument.mjs nest start"
```

If you can't pass the `--import` flag to the Node.js binary, you can alternatively use the `NODE_OPTIONS` environment variable as follows:

```bash
NODE_OPTIONS="--import ./instrument.mjs" npm run start
```

We do not support ESM in Node versions before 18.19.0.

## [Troubleshooting ESM Instrumentation](https://docs.sentry.io/platforms/javascript/guides/nestjs/install/esm.md#troubleshooting-esm-instrumentation)

By default, all packages are automatically wrapped by [import-in-the-middle](https://www.npmjs.com/package/import-in-the-middle) to aid instrumenting them.

If `import-in-the-middle` encounters problems wrapping a package, you may see syntax errors at runtime or logged errors in your console:

```logs
SyntaxError: The requested module '...' does not provide an export named '...'
(node:3368) Error: 'import-in-the-middle' failed to wrap 'file://../../path/to/file.js'
```

To confirm that these errors are caused by `import-in-the-middle`, disable it by setting `registerEsmLoaderHooks` to false. Note, this will also disable tracing instrumentation:

`instrument.mjs`

```javascript
import * as Sentry from "@sentry/nestjs";

Sentry.init({

  registerEsmLoaderHooks: false,

});
```
