dateformat@4.5.1 npm包在Node服务器重启时报require加载ES模块错误
原始报错翻译:服务端必须使用import语法加载ES模块,通过require()加载ES模块的操作不被支持,报错文件路径:
usr/src/app/nodemodules/dateformat/lib/dateformat.js
报错原因
dateformat 从4.0.0版本开始正式改为纯ESM(ECMAScript 模块)包,不再支持CommonJS规范的require()语法引入,你当前的项目使用CommonJS规范加载该包,就会触发该报错。
解决方案
以下三种方案按需选择即可:
方案1:项目切换为ESM规范
在项目根目录的package.json文件中新增配置项:"type": "module"同时把原来引入dateformat的代码从
const dateFormat = require('dateformat')改为ES导入语法:import dateFormat from 'dateformat'其余业务代码无需改动即可正常运行。
方案2:降级dateformat到支持CommonJS的版本
dateformat最后一个兼容CommonJS的版本为3.0.3,直接卸载现有版本后安装指定版本即可:npm uninstall dateformat npm install dateformat@3.0.3安装完成后原有
require()引入代码无需修改即可正常使用。方案3:CommonJS项目中使用动态import引入
如果不想改动项目规范也不想降级包,可以用动态import语法异步加载该ESM包:// 异步函数内使用 async function yourFunction() { const { default: dateFormat } = await import('dateformat') // 后续正常调用dateFormat方法即可 }注意该方式引入的包只能在异步逻辑内使用。
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

