JavaScript および TypeScript の開発者は、さまざまなモジュール システムを使用しているときに予期しないエラーに遭遇することがよくあります。よくある問題の 1 つは、「モジュールの外ではインポート ステートメントを使用できません」というエラーです。通常、最新の ES モジュール (ESM) を使用する場合、または Webpack、Babel、Node.js 環境などのバンドラーが関与するセットアップを処理する場合に発生します。このブログでは、このエラーの原因、発生理由、およびそれを解決するための実際的な解決策を検討します。
「モジュール外の import ステートメントは使用できません」エラーは一目瞭然です。このエラーは、JavaScript が有効な ES モジュール外の import ステートメントに遭遇したときに発生します。JavaScript では、モジュール システムがコードの分割方法を決定します。 ES モジュール (インポート/エクスポート) と CommonJS (require/module.exports) が 2 つの主要なモジュール システムです。
JavaScript がコードを ES モジュールとして認識しない場合、このエラーがスローされます。
これは通常、JavaScript/TypeScript がモジュール コンテキストの外側で import ステートメントに遭遇したときに発生します。これは、インポートしようとしているファイルが ES モジュールとして認識されていないことを意味します。
このエラーが発生する一般的な理由は次のとおりです:
デフォルトで CommonJS を使用する Node.js : デフォルトでは、Node.js は ES モジュールではなく CommonJS (CJS) モジュールを使用します。これは、指定しない限り、インポート/エクスポート構文がネイティブにサポートされていないことを意味します。
Babel/Webpack の構成が間違っています: コードをバンドルするとき、特にターゲット環境が ES モジュールをネイティブにサポートしていない場合、Babel や Webpack などのツールが ES モジュールを正しく処理するように構成されていない可能性があります。 &&&]
"type" が見つかりません: package.json に "module": Node.js プロジェクトで ES モジュールを使用している場合は、"type" を追加して明示的に指定する必要があります: package.json.
内の「モジュール」ファイル拡張子の不一致: ES モジュールに .mjs の代わりに .js を使用したり、その逆を行うと、このエラーが発生することがあります。
方法 1: package.json:
を変更する
{ "type": "module" }package.json に "type": "module" を追加することで、すべての .js ファイルを ES モジュールとして扱うように Node.js に指示します。
方法 2: ファイルの名前を .mjs:
に変更します
package.json を変更したくない場合は、ファイルの名前を .mjs (たとえば、index.mjs) に変更して、ES モジュールであることを明示的に示すことができます。
Babel の場合: .babelrc または babel.config.json ファイルを更新します:
{ "type": "module" }Webpack の場合: webpack.config.js ファイルを更新します:
{ "type": "module" }
で始まる必要があります。
node_modules からモジュールをインポートする場合は、パッケージが ES モジュールをサポートしていることを確認してください。そうでない場合は、Webpack などのバンドラーを使用して処理する必要がある場合があります。
ESモジュール
ES モジュールは非同期でロードされるため、パフォーマンスが向上し、モジュールの並列ロードが可能になります。また、名前付きエクスポート、デフォルト エクスポート、および循環依存関係もサポートします。 ES モジュールは、最新のブラウザーと Node.js (「type」: 「module」フラグ付き) で広くサポートされています。
CommonJS モジュール
CommonJS モジュールはブラウザーではネイティブにサポートされていませんが、Babel や Webpack などのツールを使用して ES モジュールにトランスパイルできます。 CommonJS モジュールは依然として Node.js プロジェクトで広く使用されていますが、ES モジュールはより優れたパフォーマンスと静的分析能力により人気が高まっています。
これら 2 つのモジュール システムが存在する理由は、JavaScript の進化と、より最新の標準化されたモジュール システムの必要性によるものです。 ES モジュールは JavaScript モジュールの未来ですが、CommonJS モジュールは依然として既存のプロジェクトや環境で広く使用されています。
デバッグのヒント
Node.js バージョンの確認: ES モジュールのサポートは Node.js 12 でネイティブに導入されたため、Node.js バージョン 12.x 以降を実行していることを確認してください。古いバージョンでは、ES モジュールは動作しません。 Node.js Web サイトにアクセスしてバージョンを更新してください。
ブラウザのサポートを確認: ブラウザ環境で作業している場合は、ブラウザが ES モジュールをサポートしていることを確認してください。最新のブラウザのほとんどは対応していますが、古いバージョンでは対応していない可能性があります。
タイプミスをチェックする: コード内の単純なタイプミスがこのエラーの原因となる場合があります。コードにスペルミスや構文が間違っていないか再確認してください。
TypeScript に npx tsc を使用する: TypeScript を使用していてこのエラーが発生した場合は、npx tsc を実行して TypeScript コードを JavaScript にコンパイルすると、問題の特定に役立つ可能性があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3