問題のあるApolloServerプロジェクトがあるので、更新しようと思ったのですが、最新の Babel を使用すると問題が発生しました。私の "index.js" は次のとおりです。
require('dotenv').config()
import {startServer} from './server'
startServer()
そして実行するとエラーが発生します
構文エラー: モジュール外でインポート文を使用できません
まず、TPTB* にこれがモジュールであると信じ込ませようとしましたが、うまくいきませんでした。そこで、「import」を「require」に変更したらうまくいきました。
しかし、今では他のファイルにも約 2 ダースの「インポート」があり、同じエラーが発生します。
* 問題の根本は、何が問題を引き起こしているのかさえわからないことにあると思います。Babel 7 が原因だと推測しましたが (Babel 6 から移行し、プリセットを変更する必要があったため)、100% 確信はありません。
私が見つけた解決策のほとんどは、直接 Node には適用できないようです。たとえば、次のようになります。
ES6 モジュールのインポートで「Uncaught SyntaxError: 予期しない識別子」が表示される
「type=module」を追加することで解決したと書かれていますが、これは通常 HTML に記述されますが、私には 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",
ベストアンサー1
最新バージョンのNode.js(または少なくとも13.2.0+)がインストールされていることを確認します。次に、次のいずれかを実行します。ドキュメントに記載されている:
オプション1
最も近い親package.json
ファイルで、トップレベル"type"
フィールドを の値で追加します。これにより、すべてのおよびファイルが ES モジュールとして解釈される"module"
ようになります。個々のファイルは次のように解釈できます。.js
.mjs
コモンJS拡張機能を使用します.cjs
。
// package.json
{
"type": "module"
}
オプション2
拡張子を使用してファイルを明示的に命名します.mjs
。 などの他のすべてのファイルはCommonJS として解釈されます。これは、で が定義されていない.js
場合のデフォルトです。type
package.json