You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

dateformat@5.0.1报dateFormat is not a function 无type:module配置下如何解决

问题根源

你遇到的报错是两个原因共同导致的:

  1. dateformat从v5.0.0版本开始转为纯ESM模块,不再支持CommonJS规范的require()直接导入,而你的项目未设置type: module,默认是CommonJS运行环境,二者规范不匹配。
  2. 你使用的动态import('dateformat')语法返回值是Promise对象,不是dateformat导出的方法本身,直接作为函数调用必然会报错。

解决方案(推荐优先用方案1,适配性最高)

方案1:降级dateformat到支持CommonJS的4.x版本

这是改动最小的适配方式,无需修改项目其他配置:

  1. 执行命令卸载当前版本并安装4.x分支的最后稳定版:
npm uninstall dateformat
npm install dateformat@4.6.3
  1. 将你的导入语句改回CommonJS规范写法即可:
// 把原来的var dateFormat = import('dateformat');替换成下面这句
const dateFormat = require('dateformat');

其余业务代码完全不用修改,即可正常调用dateFormat方法。

方案2:保留v5.x版本的适配方式

如果你确实需要使用v5版本的新特性,按如下方式修改代码:
因为CommonJS环境下无法直接导入ESM模块,你需要处理动态import返回的Promise,同时要获取ESM模块的default导出:

var fs = require('fs');
var cluster = require('cluster');
// 先预加载模块
let dateFormat;
import('dateformat').then(mod => {
  dateFormat = mod.default;
});

module.exports = function(logSystem) {
  process.on('uncaughtException', function(err) {
    // 加个防护逻辑,避免模块加载完成前触发报错调用
    if (!dateFormat) return;
    console.log('\n' + err.stack + '\n');
    var time = dateFormat(new Date(), 'yyyy-mm-dd HH:MM:ss');
    fs.appendFile(config.logging.files.directory + '/' + logSystem + '_crash.log', time +
      '\n' + err.stack + '\n\n',
      function(err) {
        if (cluster.isWorker)
          process.exit();
      });
  });
};

内容的提问来源于stack exchange,提问作者dagwood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 07:15:05