如何在 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”,无法确定哪种配置能解决问题。
备注:内容仅供参考。
