直接运行Node.js文件成功,但通过cron调度执行时失败,错误 [ERR_REQUIRE_ESM]

前端开发 2026-07-12

当我直接运行一个.js文件时是成功的,但通过cron运行时却因一个我甚至不知道自己安装了的包的错误而失败。为什么结果会不同?

adrian@nfp:~$ node upd_ATC_ALC_daily_from_server_file.js <-- successful
00 01 * * * node /home/adrian/nfp-repo/login/upd_ATC_ALC_daily_from_server_file.js >> /tmp/crlog.log 2>&1 | logger -t mycmd


adrian@nfp:/tmp$ cat crlog.log 
Mon Mar  9 01:14:01 UTC 2026 Hello from crontab
/home/adrian/nfp-repo/login/node_modules/html-encoding-sniffer/lib/html-encoding-sniffer.js:2
const { getBOMEncoding, labelToName } = require("@exodus/bytes/encoding-lite.js");
                                        ^

Error [ERR_REQUIRE_ESM]: require() of ES Module /home/adrian/nfp-repo/login/node_modules/@exodus/bytes/encoding-lite.js from /home/adrian/nfp-repo/login/node_modules/html-encoding-sniffer/lib/html-encoding-sniffer.js not supported.
Instead change the require of encoding-lite.js in /home/adrian/nfp-repo/login/node_modules/html-encoding-sniffer/lib/html-encoding-sniffer.js to a dynamic import() which is available in all CommonJS modules.
    at Object.<anonymous> (/home/adrian/nfp-repo/login/node_modules/html-encoding-sniffer/lib/html-encoding-sniffer.js:2:41) {
  code: 'ERR_REQUIRE_ESM'
}

Node.js v20.11.0

解决方案

几年前我安装了Node.js。最近我安装了nvm,并把Node.js更新到了最新版本(25.7.0)。这正是Node.js版本不一致问题的原因。

adrian@nfp:~$ nvm which current
/home/adrian/nfp-repo/login/.nvm/versions/node/v25.7.0/bin/node
adrian@nfp:~$ which node
/home/adrian/nfp-repo/login/.nvm/versions/node/v25.7.0/bin/node

我把该版本的完整路径加入到cron中,结果如预期地工作。

https://www.reddit.com/r/node/comments/2h5885/how_to_use_node_installed_with_nvm_to_set_up_a/ - 这个帖子对我很有帮助。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章