nodejs中 import 报错
在Node.js中使用import
时出现报错,通常是由于配置不当或文件格式不正确引起的。解决这一问题的常见方案包括:确保文件以.mjs
为扩展名或者在package.json
中设置"type": "module"
,同时检查语法和模块路径是否正确。
下面将从多个角度分析并解决此问题。
1. 确保文件类型正确
Node.js 默认使用 CommonJS 模块系统,而 import
是 ES6 模块系统的语法。如果直接在 .js
文件中使用 import
语句,Node.js 会将其视为 CommonJS 文件,从而导致语法错误。可以通过以下两种方式之一来解决:
- 方法一:将文件扩展名改为
.mjs
。
javascript
// test.mjs
import { readFile } from 'fs/promises';</p>
<p>async function read() {
const data = await readFile('./example.txt', 'utf8');
console.log(data);
}</p>
<p>read();
运行命令:
bash
node test.mjs
- 方法二:在项目的
package.json
文件中添加"type": "module"
字段。
json
{
"name": "your-project-name",
"version": "1.0.0",
"type": "module"
}
此时可以继续使用 .js
扩展名,并正常执行 import
语句。
2. 检查模块路径及语法
除了文件类型问题,错误也可能源于模块路径错误或语法问题。例如,当尝试导入一个不存在的模块或路径写错时,Node.js 将抛出错误。
正确示例:
```javascript
// utils.js
export function add(a, b) {
return a + b;
}
// main.js
import { add } from './utils.js';
console.log(add(2, 3));
```
如果路径错误,比如写成 ./utiils.js
(多打了一个 i),则会收到类似 Cannot find module
的错误信息。
3. 使用 --input-type 标志
对于一些临时测试场景,可以直接在命令行中使用 --input-type=module
参数来指定输入代码为 ES 模块。
示例:
bash
echo "import fs from 'fs'; console.log(fs.readFileSync('example.txt', 'utf8'));" | node --input-type=module
通过上述几种方法,基本可以解决 Node.js 中 import
报错的问题。每种方法适用于不同场景,开发者可以根据实际需求选择合适的解决方案。