直接运行Node.js文件成功,但通过cron调度执行时失败,错误 [ERR_REQUIRE_ESM]
当我直接运行一个.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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。