JavaScript
import文でエラーが出る
モジュール設定がされていない
こんな症状
import文を書いたら「Cannot use import statement outside a module」と表示される。モジュール設定で起きるよ。
まず試す
ブラウザは <script type="module" src="app.js">、Node.jsは package.json に "type": "module" を追加する。
js
<!-- ブラウザ: type="module" を付ける -->
<script type="module" src="app.js"></script>これで直らなければ、下の「自分のケース」を確認。
🔍 自分のケースはどれ?
- ✓ブラウザで import を使った
→ <script type="module"> にする。 - ✓Node.jsで import を使った
→ package.json に "type": "module" を足す(またはファイルを .mjs に)。 - ✓require と import が混在
→ CommonJS と ESM は混ぜられない。どちらかに統一する。
なぜ起きる?
HTMLのscriptタグにtype="module"が指定されていない、またはNode.jsでpackage.jsonに"type":"module"がないよ。ブラウザやNode.jsはデフォルトでスクリプトを「クラシックモード」として扱い、import/export構文を認識しないんだ。モジュールモードに切り替える必要があるよ。
✕ エラーが起きるコード
<!-- type指定なしのscriptでimportを使うと… -->
<script src='app.js'></script>
// app.js
import { sum } from './math.js';
// Uncaught SyntaxError: Cannot use import statement outside a module✓ 直したコード
<!-- ✅ type='module' を付ける -->
<script type='module' src='app.js'></script>
// Node.jsの場合は package.json に追記
// { 'type': 'module' }
// またはファイルを .mjs 拡張子にする✅ 直ったか確認
import がエラーなく動き、読み込んだ関数等が使えればOK。
この解決法は役立ちましたか?
🔗 関連するエラー
- Uncaught TypeError: Cannot read properties of null (reading 'addEventListener') — 取得しようとしたHTML要素が見つかっていない
- Uncaught ReferenceError: Cannot access 'x' before initialization — let/constの宣言前にアクセスしている
- Uncaught TypeError: Cannot read properties of undefined (reading 'length') — undefinedに対して.lengthを読んでいる
- Uncaught TypeError: Cannot set properties of null (setting 'textContent') — nullに対してプロパティを設定しようとしている
- Uncaught SyntaxError: Illegal return statement — 関数の外でreturnを使っている
🔗 別カテゴリの関連エラー
📖 この問題を学べるレッスン
✏️ 手を動かして練習
📝 関連ブログ記事
- プログラミングのエラーメッセージの読み方 — エラーの読み方を基礎から解説
- JavaScriptとは?初心者向けにわかりやすく解説 — 変数・関数・イベントの基本
- JavaScriptでボタンクリックを動かす方法 — ボタンクリック時の動作を解説