Node.js使用import出现ERR_MODULE_NOT_FOUND错误求助
问题原因与解决方法
核心原因
Node.js的ESM(ECMAScript模块)系统和CommonJS模块系统的模块解析规则存在关键差异:
- CommonJS会读取
NODE_PATH环境变量,你设置的/home/tester/node/lib/node_modules正好是全局模块的安装路径,因此require('express')能正常找到全局安装的express。 - ESM不支持
NODE_PATH,它默认只会在当前项目的node_modules目录下查找模块,不会读取NODE_PATH指定的全局路径,所以直接import express from 'express'找不到全局安装的express。
解决方法
方法1:本地安装express(推荐)
进入测试项目目录,执行本地安装命令:
cd /tmp/test npm install express
安装完成后,直接运行node /tmp/test/test.js即可,ESM会自动从本地node_modules中加载express模块。这也是现代Node.js项目的标准做法,能避免全局模块版本冲突等问题。
方法2:通过import map指定全局模块路径
如果坚持使用全局安装的模块,可以创建importmap.json文件映射模块路径:
{ "imports": { "express": "/home/tester/node/lib/node_modules/express/lib/index.js" } }
然后通过以下命令运行脚本:
node --import-map=/tmp/test/importmap.json /tmp/test/test.js
这种方式需要手动维护模块路径,灵活性较差,仅适合特殊场景。
方法3:使用绝对路径导入
直接在test.js中使用全局模块的绝对路径:
import express from '/home/tester/node/lib/node_modules/express/lib/index.js'
这种方式硬编码了路径,迁移性差,不推荐使用。
内容的提问来源于stack exchange,提问作者張俊芝
相关产品推荐
相关产品推荐

