NodeJS Warning: Accessing non-existent property ‘padLevels’ 解决办法

Node14以下版本的NodeJS项目在Node14及以上版本中运行时,可能会抛出以下警告:

Warning: Accessing non-existent property 'padLevels' of module exports inside circular dependency

此时,使用node --trace-warnings定位到对应的文件源中,可以找到类似的异常代码:

if (target.padlevels) {
    target.levelLength = exports.longestElement(Object.keys(target.levels));
  }

将target.padlevels修改为false,即可解决问题,不影响正常使用。
如若使用npm命令进行打包、依赖更新、平台迁移等,亦可使用shell命令进行字符串替换,如:

find -name 'common.js' | xargs perl -pi -e 's|target.padLevels|false|g'

这一抛出异常的代码通常处于日志库中(如winstonJS)等。这些库被许多知名npm仓库引用,并在库内部引发了循环依赖问题。但也正因如此,由于其涉及的主要问题是日志问题(发生问题的核心padLevels参数一般也位于日志的setLevels方法中,即确定日志的记录等级),不会影响实际的功能使用。在处理此类问题时,直接在高版本的nodeJS中将对应模块涉及padLevels的变量访问语句屏蔽即可。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐