PAYATHON 2026

如何在 Node.js 中快速运行使用 ES6 的代码?

技术老齐

如果报错出在 import 或 export,通常最快的做法是在 package.json 中添加 "type": "module",再执行 node index.js。只运行一个脚本时,也可以把文件改名为 index.mjs。

现代 Node.js 已经支持 const、let、箭头函数、解构等 ES6 语法,使用这些语法通常无需安装 Babel。不过,没有具体代码和报错信息,还无法确定是否是模块配置出了问题。

为什么执行 npm init 后仍然报错?

npm init -y 只会生成 package.json,不会安装 JavaScript 转译工具,也不会“激活 ES6”。

能否运行,需要分别看两个问题:

  • 当前 Node.js 版本是否支持代码中的 JavaScript 语法。
  • 文件是否按 ES Modules 规则加载,以允许使用静态 import、export。

普通 ES6 语法一般可以直接运行;模块语法还涉及文件扩展名和 package.json 配置。较新的 Node.js 能在部分场景中自动检测模块语法,但显式声明模块类型更清楚。参见 Node.js 模块类型说明。

使用 import、export 时怎么配置?

打开项目中的 package.json,在最外层添加 "type": "module"。下面是最小示例,已有项目应保留其他字段。如果已经有 "type": "commonjs",直接修改该字段,不要重复添加。

{
  "name": "es6-demo",
  "version": "1.0.0",
  "type": "module"
}

然后创建或修改 index.js:

import { basename } from 'node:path';

const files = ['/tmp/example.txt', '/tmp/demo.js'];
const names = files.map(file => basename(file));

console.log(names);

在项目目录执行:

node index.js

这个示例只使用 Node.js 内置模块,无需额外安装依赖。"type": "module" 会让该包作用范围内的 .js 文件按 ES Modules 加载。具体规则见 Node.js 官方文档。

只想运行一个文件怎么办?

将 index.js 重命名为 index.mjs,再运行:

node index.mjs

.mjs 明确表示 ES Modules,无需再设置 "type": "module"。如果脚本还导入了其他本地文件,这些文件也需要采用正确的模块格式。参见 ES Modules 启用方式。

只用了箭头函数等语法,还需要配置吗?

通常不需要。下面的 index.js 就可以直接由现代 Node.js 执行:

const numbers = [1, 2, 3];
const doubled = numbers.map(number => number * 2);

console.log(doubled);

运行命令是:

node index.js

如果报错指向这类基础语法,先检查实际使用的 Node.js 版本:

node --version

如果版本过旧,先升级 Node.js,再重新运行。Node.js 的 ES6 支持说明介绍了语法支持与运行版本之间的关系。

配置后还报错,需要检查什么?

  • 出现 Cannot use import statement outside a module 时,检查 package.json 是否位于脚本所在目录或其父目录,以及 "type" 是否写在最外层。
  • 出现 require is not defined in ES module scope 时,检查文件中的 CommonJS 写法。ES Modules 不直接提供 require、module.exports;仍需使用 CommonJS 的文件可以保留为 .cjs。
  • 使用相对路径导入本地 JavaScript 文件时,写全扩展名,例如 import { add } from './utils.js'。
  • 出现 ERR_MODULE_NOT_FOUND 时,检查导入路径是否正确、依赖是否已安装。设置模块类型不会自动安装依赖。

具体模块规则可查阅 ES Modules 文档。如果仍然报错,需要结合完整报错、出错行和 node --version 的结果判断原因。仅凭“用了 ES6”,无法确定哪种配置能解决问题。

备注:内容仅供参考。