JavaScript

It’s a way in Node.js to use import and export like in the browser, so you can split your code into small files and keep everything easy to read and work with.

Node.js

Node.jsでブラウザと同じように importexport が使え、ファイルを分けて読み書きしながら分かりやすく作れる仕組みのことです。

Node.js の ESM とは?

ESM(ECMAScript Modules) とは「import / export を使ってモジュールを扱う、JavaScriptの標準ルール」のことです。

つまり ESM は…

例:ESM の書き方

moduleA.js

JavaScript

export function hello() {
    console.log("Hello!");
}

main.js

JavaScript

import { hello } from "./moduleA.js";
hello();

ブラウザでも Node.js でも同じように動く、というのがメリット。

Node.jsでESMを使うには?

Node.js は昔からの require 方式(CommonJS)をサポートしていたので、ESM を使うためには「これ ESM で書いてますよ!」と Node.js に示す必要があります。

方法は2つ。

方法①:package.json に "type": "module"

JSON

{
	"type": "module"
}

これで .js が ESM として扱われる。

方法②:拡張子を .mjs にする

JavaScript

import something from "./other.mjs";

.mjs は自動的に ESM として扱われる。

require と import どっちを使えばいいの?

結論:

よくあるつまずき例

JavaScript

import express from "express";

を使いたいのに

JavaScript

SyntaxError: Cannot use import statement outside a module

が出る → "type": "module" を忘れているケースが多い。

正確な説明