Module Java Script

Page content

.mjs の意味

  • Module JavaScript の略

  • ES Modules(import/export を使うモジュール方式)で書かれた JS ファイルであることを示す

ファイルの拡張子 .mjs は、ECMAScript Modules (ES Modules / ESM) として扱われる JavaScript ファイルであることを明示するための拡張子です。

主に Node.js 環境において、従来の読み込み方式(CommonJS)と区別するために使われます。

主な特徴とポイント

  1. ES Modules (ESM) の強制

    • Node.js では通常、.js ファイルは CommonJSrequire / module.exports を使う方式)として扱われます。
    • .mjs 拡張子を使うと、そのファイルは強制的に ES Modulesimport / export を使う方式)として扱われます。
  2. 構文の違い

    • CommonJS (.js のデフォルト):
      const fs = require('fs');
      module.exports = function() { ... };
      
    • ES Modules (.mjs):
      import fs from 'fs';
      export function myList() { ... };
      
  3. Strict Mode(厳格モード)がデフォルト

    • .mjs ファイル内では、自動的に 'use strict'; が適用された状態になります(変数の宣言漏れがエラーになるなど、安全なコードになります)。

なぜ作られたのか?

JavaScript の標準仕様(ES2015/ES6)でモジュール機能(import/export)が決まりましたが、Node.js にはそれ以前から存在する独自のモジュール機能(CommonJS)がありました。

Node.js がファイルを実行する際、「このファイルは新しい方式(ESM)で読むべきか、古い方式(CommonJS)で読むべきか」を判断する必要があります。その判断を簡単かつ確実にするために、「.mjs なら新しい方式(ESM)である」というルールが導入されました。

最近のトレンド(package.json での設定)

現在では、拡張子を .mjs に変える代わりに、プロジェクトの設定ファイルである package.json に以下を記述する方法も一般的です。

{
  "type": "module"
}

これを設定すると、そのプロジェクト内の .js ファイルもすべて ES Modules として扱われるようになります(逆に CommonJS を使いたい場合は .cjs という拡張子を使います)。

まとめ

  • .mjs = Node.js で import / export を使うためのファイル。
  • これを使うと、Node.js に対して「これはモダンな JavaScript (ESM) だよ」と伝えることができます。

MJSは JavaScript モジュールを表すファイル拡張子です。

主な特徴

ES Modules形式のJavaScriptファイルであることを明示的に示します。通常の.jsファイルと異なり、.mjsファイルは常にモジュールとして扱われます。

.jsとの違い

  • .js - package.jsonの設定によってモジュールか従来のスクリプトか決まる
  • .mjs - 常にES Modulesとして扱われる
  • .cjs - 常にCommonJS形式として扱われる

使用例

// math.mjs
export function add(a, b) {
  return a + b;
}

// main.mjs
import { add } from './math.mjs';
console.log(add(2, 3));

Node.jsやモダンなJavaScript環境で、モジュールシステムを明確に区別したい場合に使用されます。ただし、最近ではpackage.jsonで"type": "module"を指定し、.js拡張子のままモジュールとして扱うことも一般的です。