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

使用browserify打包node-cron实现JS定时任务时遇process.hrtime错误

浏览器端使用node-cron定时任务报错解决办法

问题背景

要实现网站每天凌晨12点执行定时任务,因浏览器环境无法直接使用require(),尝试用browserify打包node-cron相关代码,编写了data_retrieve.js:

class RunCron {
    
    constructor() {
        
        var cron = require('node-cron');
        
        cron.schedule('0 0 * * *', () => {
            
            $.ajax({
                  type: "POST",
                  url: "/main.py",
                  data: { param: text}
                }).done(function( o ) {
                   console.log("Done running py!");
                });
        });
    }
    
}

var r = new RunCron();

打包生成bundle.js后,运行时出现错误:

Uncaught TypeError: process.hrtime is not a function
at Scheduler.start (bundle.js:1791:33)
at new ScheduledTask (bundle.js:1749:29)
at createTask (bundle.js:1564:12)
at Object.schedule (bundle.js:1553:18)
at new RunCron (bundle.js:1229:8)
at 5.node-cron (bundle.js:1246:9)
at o (bundle.js:1:633)
at r (bundle.js:1:799)
at bundle.js:1:828
at bundle.js:1:318

追踪错误到bundle.js中Scheduler类的start方法,该方法依赖Node.js的process.hrtime()API。

错误原因

node-cron是专为Node.js环境设计的定时任务库,底层依赖Node.js内置的process对象及相关API(如process.hrtime),而浏览器环境中不存在process对象,browserify无法完整模拟这类Node.js专属API,因此打包后运行报错。

另外,浏览器端定时任务本身存在可靠性问题:用户关闭页面、浏览器进入休眠状态都会导致任务中断,无法保证每天凌晨稳定执行。

解决办法

方案1:改用浏览器兼容的定时任务库

选择支持浏览器环境的cron库,比如croner(同时支持Node.js和浏览器):

  1. 安装依赖:
npm install croner
  1. 修改data_retrieve.js代码:
import Cron from 'croner';

class RunCron {
    constructor() {
        // 每天凌晨12点执行任务
        Cron('0 0 * * *', () => {
            $.ajax({
                type: "POST",
                url: "/main.py",
                data: { param: text }
            }).done(() => {
                console.log("Done running py!");
            });
        });
    }
}

var r = new RunCron();
  1. 用browserify打包该文件即可,croner不依赖Node.js专属API,可在浏览器中正常运行。

方案2:将定时任务迁移到服务器端(推荐)

服务器端的定时任务不受浏览器状态影响,稳定性更高,步骤如下:

  1. 在服务器上搭建Node.js服务,安装依赖:
npm install node-cron axios
  1. 编写服务器端定时任务代码(比如server-cron.js):
const cron = require('node-cron');
const axios = require('axios');

// 每天凌晨12点调用接口
cron.schedule('0 0 * * *', async () => {
    try {
        await axios.post('http://你的域名/main.py', { param: text });
        console.log("Done running py!");
    } catch (err) {
        console.error("任务执行失败:", err);
    }
});
  1. 启动该服务(可配合pm2等工具保证服务持续运行),即可实现每天自动执行任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:15:03