Cannot use import statement outside a module

最近本地docker构建node项目时报错Cannot use import statement outside a module”,”event”:”uncaughtException。排查解决后,这里mark下。

环境说明

  • NodeJS版本为v12
  • 整个项目是CommonJS规范

错误含义

根据错误栈最后查到是node_modules/axios/lib/core/buildFullPath.js位置。本地开发环境下查看文件并没有问题,但进入docker容器中查看果然该文件中采用的ES import写法。由此确定根本问题。

原因追溯

  1. docker构建时package.lock文件及Node版本都是确定的,按理应该是与开发环境高度一致,但现在出现了不一致,只有可能是docker构建存在缓存之类的。

  2. 查看历史发现之前我曾安装过axios@latest即v1版本,因为安装时不指定版本即会走最新版。查看v1版发布包,发现内容已经变成了ES版本,所以大概原因应该是这样,docker构建环节的问题。查询发现docker builder prune可以清除构建缓存。因此尝试下,重新构建发现OK。