1. ホーム
  2. ジャバスクリプト

[解決済み】SyntaxError: モジュール外部でimport文を使用できない

2022-03-24 05:51:14

質問

私は ApolloServer プロジェクトに問題があるので、それを更新しようと思い、最新のBabelを使用したときに問題が発生しました。私の "index.js" はそうです。

require('dotenv').config()
import {startServer} from './server'
startServer()

そして、それを実行すると、エラーが発生します。

SyntaxError: Cannot use import statement outside a module

まず私は、これがモジュールであることをTPTB*に納得させるために、いろいろやってみました(成功しませんでしたが)。そこで、"を変更しました。 インポート を"に変更しました。 要求する "で、これはうまくいきました。

しかし、今私は約二十の" インポート "が他のファイルでも同じエラーを発生させています。

*私の問題の根本は、何が問題に文句を言っているのかさえ分からないということです。私はそれがBabel 7であると仮定しました(Babel 6から来て、私はプリセットを変更しなければならなかったので)しかし、私は100%の確信を持っていません。

私が見つけた解決策のほとんどは、ストレートなNodeには適用されないようです。例えば、このようなものです。

ES6モジュール Import giving "Uncaught SyntaxError: 予期しない識別子"

type=module" を追加することで解決したと書かれていますが、これは通常HTMLに入るもので、私は何も持っていません。また、私のプロジェクトの古いプリセットを使用してみました。

"presets": ["es2015", "stage-2"],
"plugins": []

しかし、これには別のエラーが発生します: "エラー。プラグイン/プリセットファイルはオブジェクトのエクスポートを許可されていません。

以下は、私が始めた依存関係です。

"dependencies": {
"@babel/polyfill": "^7.6.0",
"apollo-link-error": "^1.1.12",
"apollo-link-http": "^1.5.16",
"apollo-server": "^2.9.6",
"babel-preset-es2015": "^6.24.1",

解決方法は?

最新バージョンのNode.jsがインストールされていることを確認してください(少なくとも13.2.0以上)。次に、以下のいずれかを行ってください。 ドキュメントに記載されている :

オプション1

最寄りの親会社で package.json ファイルに、トップレベルの "type" フィールドに、値として "module" . これにより、すべての .js.mjs ファイルは、ESモジュールとして解釈されます。個々のファイルを 共通JS を使用することで .cjs を拡張した。

// package.json
{
  "type": "module"
}

オプション2

ファイル名を明示的に .mjs の拡張子を使用します。他のすべてのファイル、例えば .js の場合、CommonJSとして解釈され、それがデフォルトとなります。 type で定義されていない場合は package.json .