SyntaxError:Node.js 中的意外令牌导入

SyntaxError: Node.js 中的意外令牌导入

SyntaxError: Unexpected token import in Node.js

当我们在不支持它的 Node 版本中使用 ES6 导入语法时,会发生“SyntaxError: Unexpected token import”。要解决该错误,请使用
require语法,例如,const myPackage = require('my-package')
在您的文件中将
type属性设置为。modulepackage.json

下面是错误如何发生的示例。

索引.js
import {sum} from './another-file'; import somePackage from 'some-package' /** * import {sum} from './another-file'; ^^^^^^ SyntaxError: Cannot use import statement outside a module */

要解决该错误,请将 ES6 模块导入替换require为您的 Node.js 版本支持的导入。

索引.js
// 👇️ named import for local file (relative path) const {sum} = require('./another-file'); // 👇️ default import for 3rd party package (absolute path) const somePackage = require('some-package');

使用
require CommonJS modules 语法将解决该错误。

如果您更喜欢使用
ES6 模块语法
在您的文件中将
type属性设置为。modulepackage.json

包.json
{ "type": "module", // 👇️ rest ... }
如果您没有文件,请使用项目根目录中package.json的命令初始化一个。 npm init -y

现在您可以在 Node.js 应用程序中使用 ES6 模块语法。

索引.js
import _ from 'lodash'; import express from 'express'; // 👇️ import from local file (INCLUDE EXTENSION!!!) import {sum} from './another-file.js'; console.log(_.uniq([1, 1, 3])); // 👉️ [1, 3] console.log(sum(10, 10)); // 👉️ 20 console.log(express);

当您导入本地文件并将type属性设置为 时module,您必须包括.js扩展名。

索引.js
import {sum} from './another-file.js'; console.log(sum(25, 25)); // 👉️ 50

如果省略扩展名,则会出现错误 – “错误
[ERR_MODULE_NOT_FOUND] :找不到模块 X”。

The “SyntaxError: Unexpected token import” also occurs if try to run your source
files that contain ES6 module import / export syntax, instead of running
your compiled files from your build directory.

Make sure to run your compiled files from your build/dist directory only.

Conclusion #

The “SyntaxError: Unexpected token import” occurs when we use the ES6 import
syntax in a version of Node that doesn’t support it. To solve the error, use the
require syntax, e.g. const myPackage = require('my-package') or set the
type attribute to module in your package.json file.