問題を引き起こしているApolloServerプロジェクトを持っているので、最新のBabelを使用すると、プロジェクトを更新して問題が発生する可能性があると思いました。私の「index.js」は:
require('dotenv').config()
import {startServer} from './server'
startServer()
そして、それを実行すると、「SyntaxError:モジュールの外でimportステートメントを使用できません」というエラーが表示されます。最初に、TPTB *にこれがモジュールであると納得させるために何かを試みました(成功しませんでした)。そこで、「インポート」を「必須」に変更し、これが機能しました。
しかし、今では他のファイルに約24の「インポート」があり、同じエラーが発生しています。
*問題の根本原因は、問題の不満がどこにあるかさえわからないことだと確信しています。私はそれがBabel 7であると想定していました(私はBabel 6から来ており、プリセットを変更する必要があったためです)が、100%確実ではありません。
私が見つけた解決策のほとんどは、まっすぐなノードには当てはまらないようです。このようにここに:
「Uncaught SyntaxError:Unexpected identifier」を与えるES6モジュールのインポート
「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がインストールされていることを確認します。--experimental-modules
フラグは不要になりました。-次のいずれか)を実行してください:
"type": "module"
を最も近い親package.json
に追加します。これにより、すべての.js
および.mjs
ファイルがESモジュールとして解釈されます。 .cjs
拡張子を使用して、個々のファイルをCommonJSとして解釈できます。[〜#〜]または[〜#〜]
.mjs
拡張子を付けてファイルに明示的に名前を付けます。 .js
などの他のすべてのファイルはCommonJSとして解釈されます。これは、type
がpackage.json
で定義されていない場合のデフォルトです。公式ドキュメントによると( https://nodejs.org/api/esm.html#esm_code_import_code_statements ):
importステートメントはESモジュールでのみ許可されます。 CommonJSの同様の機能については、import()を参照してください。
NodeをファイルをESモジュールとして扱う必要がある場合( https://nodejs.org/api/esm.html#esm_enabling ):
私は同じ問題を抱えていて、以下はそれを修正しました(ノード12.13.1を使用):