如何在Node.js中使用ES6的import语法?

569

我正在尝试在Node.js中掌握ES6导入语法,并尝试使用此示例提供的语法:

Cheatsheet链接

我正在查找支持表,但我无法找到哪个版本支持新的导入语句(我尝试搜索文本import/require)。我目前正在运行Node.js 8.1.2,并且认为因为cheatsheet是指 .js 文件,它应该可以与 .js 文件一起使用。

当我运行代码(取自cheatsheet的第一个示例)时:

import { square, diag } from 'lib';
我遇到了错误:
SyntaxError: Unexpected token import.
我正在尝试导入的库的引用:
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
    return x * x;
}
export function diag(x, y) {
    return sqrt(square(x) + square(y));
}

我缺少什么,如何让node识别我的import语句?


5
@Larrydx 类似。Node.js v13 要求在当前目录或其父目录中有 package.json 文件,并且文件中含有 {"type": "module"},才能使用 ES6 的 import 语法。根据文档,当最近的父级 package.json 文件包含顶级字段 "type" 并且值为 "module" 时,文件名以 .js 结尾或没有扩展名的文件将被作为 ES 模块加载。更多信息请参见:https://nodejs.org/api/esm.html#esm_package_json_type_field - Lukas Liesis
1
@Madeo 看起来不再需要转译了吗? - herman
查看对于 Node.js v16 版本中 import() 的支持 - https://nodejs.org/api/packages.html - human
1
已为此创建了一个仓库:https://github.com/jasonjin220/es6-express-rest-api-boilerplate - Jason Jin
显示剩余3条评论
11个回答

6

我不知道这是否适用于你的情况,但我正在运行一个Express.js服务器,并使用以下内容:

nodemon --inspect ./index.js --exec babel-node --presets es2015,stage-2

这使我能够导入和使用扩展运算符,即使我只使用Node.js 8版本。

您需要安装babel-cli、babel-preset-es2015和babel-preset-stage-2才能像我一样做。


谢谢,但是@babel/node 应该存在于 devDependencies 中。 - AmerllicA
是的,React也使用Babel来编译ES6。Babel是为了将ES更新编译成旧版本的JS而创建的。 - Hyzyr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接