Node.js - SyntaxError:予期しないトークンのインポート
何がいけないのか理解できません。 ノード v5.6.0 NPM v3.10.6
コードが
function (exports, require, module, __filename, __dirname) {
import express from 'express'
};
エラーが発生しました。
SyntaxError: Unexpected token import
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:387:25)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:140:18)
at node.js:1001:3
388
3
Update 3: Node 13以降、拡張子を.mjsにするか、package.jsonで "type": "module" を設定することができます。また、 don't
--experimental-modules
フラグを使う必要はありません。Update 2: Node 12からは、
.mjs
エクステンションを使うか、package.jsonに"type": "module"
を設定することができるようになりました。また、nodeを実行する際には、--experimental-modules
というフラグを立てる必要があります。Update: Node 9では、フラグの後ろで有効になっており、
.mjs
エクステンションを使用しています。import`は確かにES6の一部ですが、残念ながらNodeJSではまだデフォルトでサポートされておらず、ブラウザでもごく最近になってサポートされるようになりました。
MDNのブラウザ対応表]2やこのNode問題を参照してください。
James M Snell'氏のUpdate on ES6 Modules in Node.js(2017年2月)より。
サポートがネイティブに登場するまでは、従来の
require
文を使い続けなければなりません。NodeJSの新しいES6/7の機能を本当に使いたいのであれば、Babelを使ってコンパイルすることができます。Here's an example serverを参照してください。
残念ながら、Node.jsはES6の
import
をまだサポートしていません。あなたがやろうとしていること(Expressモジュールのインポート)を実現するには、以下のコードで十分です。
また、Expressがインストールされていることを確認するために、以下を実行してください。
Node.jsの学習に関する詳細は、Node.js Docsを参照してください。
Error: SyntaxError:予期しないトークン import または SyntaxError:予期せぬトークン export が発生しました。
解決策:すべてのインポートを例のように変更します。
また、
export default = foo;
をmodule.exports = foo;
に変更します。