# tsconfig.json module: 'ESNext' moduleResolution: 'bundler' # 换成 node16 时 module 也要跟着改
同一条导入语句,只改了模块解析策略,一边编译通过另一边报 Cannot find module ‘lodash-es’,提示里还写着需要把 moduleResolution 设成 node16,换回旧值就正常。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:旧规则只按 CommonJS 的方式找文件,新的解析策略会读包里的导出字段,第三方包只声明了 ESM 入口时,旧规则根本看不到那个入口路径。
「moduleResolution 配置」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
处理上按这个顺序:先看报错信息里提示的解析策略到底该取哪个值;按实际运行环境选打包器模式或 node16;同步调整 module 选项避免两项互相冲突。
确认没问题再收工,改完编译不再报找不到模块,编辑器跳转也能落到源码,和打包结果一致。
