How to use MJS files in Node.js?

bennycode

Benny Code

Posted on May 30, 2021

How to use MJS files in Node.js?

Today I want to show you how to import functions from *.mjs files. You can think of MJS as JavaScript code that is exported in a standardized module format. It's basically (M)odular (J)ava(S)cript. The standardization itself is called ECMAScript Modules (ESM).

By default, the Node.js platform doesn't use ES modules but CommonJS, which is a different module formatting system. Fortunately, the Node.js team introduced the concept of ES modules back in 2017 with Node v8.9.0. At that time, you could run Node.js with an additional flag (--experimental-modules) to make use of it.

Since Node v13.2.0 the experimental flag is no longer required. It only takes a few steps now to use an ECMAScript module. Let me show you how to do it.

1. Create a ES Module / MJS File

Setting up an ES module is simple: Just create a file with the *.mjs extension and export your code using the export keyword:

myFunction.mjs

export function myFunction(a, b) {
  return `${a} ${b}`;
}
Enter fullscreen mode Exit fullscreen mode

2. Import your code

You can import an ES module with the import keyword. If you work with TypeScript, you are probably already familiar with this syntax. You can import MJS files into ordinary JavaScript (JS) files:

start.js

import { myFunction } from "./myFunction.mjs";

const text = myFunction("Hello", "World");
console.log(text);
Enter fullscreen mode Exit fullscreen mode

Tip: Don't forget to add the *.mjs extension to you import statement. If you omit the file extension, Node.js will look for a .js file and report the following error:

node:internal/process/esm_loader: internalBinding('errors').triggerUncaughtException
Error [ERR_MODULE_NOT_FOUND]: Cannot find module

3. Set your package type to "module"

That's probably the biggest change: You have to create a property with the name type in your package.json file. To use ES modules, it has to bet set to module.

package.json

{
  "name": "my-package",
  "scripts": {
    "start": "node src/start.js"
  },
  "type": "module",
  "version": "0.0.0"
}
Enter fullscreen mode Exit fullscreen mode

If you forgot to set the type property, or if you set it to commonjs, you will run into the following error:

(node:2346) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
SyntaxError: Cannot use import statement outside a module

Closing

Now you know the basics of using MJS files. I tested my code listings with Node v15.14.0. I wish you good luck when trying it yourself! 🍀

Get connected 🔗

Please follow me on Twitter or subscribe to my YouTube channel if you liked this post. I would love to hear from you what you are building. 🙂 Best, Benny

💖 💪 🙅 🚩
bennycode
Benny Code

Posted on May 30, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related