为什么Renovate更新依赖后构建突然失败?
我在项目里配置了Renovate自动更新依赖,昨天成功更新了lodash到4.17.23,但今天构建时突然报错TypeError: _lodash.default.debouce is not a function。已经试过删除node_modules和lock文件重新安装,但问题依旧。
检查Renovate配置发现pinDigests: true,难道是版本锁定的问题?或者可能是新版本删除了某些默认导出?
错误发生在使用import debounce from 'lodash/debounce'的组件里。查看package.json发现依赖写的是"lodash": "^4.17.21",而package-lock里确实锁定了4.17.23版本。
其他同事没有这个问题,可能是我的本地环境问题吗?还是Renovate更新时有隐藏的配置冲突?
你遇到的错误是因为混用了默认导入和命名导入的方式。在lodash 4.17.23版本里,正确的用法是使用命名导入而不是默认导入。把代码从
import debounce from 'lodash/debounce'改成import { debounce } from 'lodash'就能解决问题。至于为什么其他同事没问题,很可能是因为他们的构建工具配置不同,或者node环境版本不一样导致解析模块的方式有差异。不过根本解决方案还是改用正确的导入方式。
顺便说个开发小技巧,这种问题可以用以下代码快速验证:
最后提醒一下,pinDigests这个配置其实是为了确保依赖的确定性,跟这个错误关系不大。建议团队统一一下lodash的使用规范,避免类似问题。