1. 主页 > 好文章

解决Node模块加载失败的3种方法:路径设置与语法详解

你是不是经常在终端看到这种红色报错???Cannot find module 'xxx'?? 就像打游戏卡在加载界面,代码死活跑不起来?别慌!今天教你三招必杀技,保准让你告别模块加载失败!


一、路径规则要记牢(这个坑我掉过8次)

??核心原则:?? Node.js找模块就跟快递员送货似的——地址写错就送不到!

??场景1:自家兄弟模块(自定义模块)??

javascript复制
// 错误写法 ?
import utils from 'utils' 

// 正确姿势 ?
import utils from './utils.js' 

??划重点:?? 当前目录必须带??./??,就像跟邻居借酱油得说"隔壁老王家"!

??场景2:父级目录模块??

javascript复制
// 爷爷辈的模块要这么找
import config from '../../config.js' 

??防坑指南:??

  • 每多一层目录就多加一个../
  • 用??path.resolve??更保险:
javascript复制
import { resolve } from 'path'
const configPath = resolve(__dirname, '../../config.js')

二、文件后缀的潜规则(新手100%中招)

你以为.js文件可以随便写后缀?Too young!

文件类型require写法import写法
.js默认支持需要??type:module??
.mjs不支持强制ES模块
.cjs强制CommonJS不支持

??血泪案例:??

bash复制
Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/xxx'

??急救三件套:??

  1. 检查文件名是不是手滑写成.util.js(多个点)
  2. 用import时??必须写完整后缀??
  3. 试试这个万能命令:
bash复制
node --experimental-specifier-resolution=node index.js

三、环境变量的魔法(资深玩家必备)

知道为啥别人代码能跑你的报错吗?可能是??NODE_PATH??在捣鬼!

??设置方法(不同系统通用):??

bash复制
# 临时设置
export NODE_PATH=./src

# 永久生效(加到.bashrc或.zshrc)
echo 'export NODE_PATH=./src' >> ~/.zshrc

??路径查找优先级(重点!)??

  1. ??核心模块??(fs、path这些亲儿子)
  2. ??node_modules目录??
  3. 上级目录的node_modules(像爬楼梯一样往上找)
  4. 环境变量设置的路径

??查案工具推荐:??

javascript复制
console.log(module.paths) // 打印当前查找路径

个人私房调试技巧(一般人我不告诉)

最近发现个神器——??require.resolve()??!它能告诉你Node.js到底在哪找模块:

javascript复制
console.log(require.resolve('lodash'))
// 输出:/Users/xxx/node_modules/lodash/lodash.js

用这招瞬间看穿路径问题,比侦探还管用!

最后说句大实话:??别死磕一种导入方式!?? 我见过有人用import死活加载不了第三方库,换成require秒解决。记住啊——代码能跑起来才是王道,管它黑猫白猫呢!

本文由嘻道妙招独家原创,未经允许,严禁转载