在 Node.js 中使用import 导入模块时报错,通常是由于 Node.js 默认使用 CommonJS 规范,而import 语句是 ES6 模块的语法,以下是详细的解决方案及示例:
解决方案
1、安装 Babel:Babel 是一个 JavaScript 编译器,可以将 ES6+ 的代码转换为向后兼容的 JavaScript 代码,从而让 Node.js 能够理解和运行使用import 语句的代码。

在项目根目录下执行以下命令安装相关依赖:
npm install save babelcore babelpresetenv babelcli 创建.babelrc 文件,内容如下:
{
"presets": [
["env", { "modules": true }]
]
} 或者使用以下命令创建并初始化.babelrc 文件:
npm init y
npm install savedev @babel/core @babel/presetenv
npx babel init2、修改package.json 文件:在scripts 字段中添加启动脚本,以便使用 Babel 来编译并运行代码。
"scripts": {
"start": "node index.js"
}修改为:
"scripts": {
"start": "npx babelnode index.js"
}3、使用.mjs 扩展名:另一种方法是将文件的扩展名改为.mjs,这样 Node.js 会将其视为 ES 模块,从而可以直接使用import 语句,而无需 Babel 编译,将index.js 重命名为index.mjs。

4、设置type 字段:在package.json 文件中添加"type": "module" 字段,明确指定该包使用 ES 模块。
{
"name": "myproject",
"version": "1.0.0",
"main": "index.js",
"type": "module"
}示例
假设有以下简单的 ES6 模块代码:
// mathModule.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a b;
}在另一个文件中使用import 导入并使用该模块:
// main.js
import { add, subtract } from './mathModule.js';
console.log(add(2, 3)); // 输出 5
console.log(subtract(5, 3)); // 输出 2如果按照上述方法配置好 Babel 或修改文件扩展名、package.json 等,就可以正常运行这个使用import 的代码了。

