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

如何在app.js中识别启动脚本是npm run dev还是npm start?

如何让app.js识别当前启动脚本是dev还是start

核心思路是通过环境变量区分启动模式,下面是具体实现方法:

1. 修改package.json脚本,添加环境变量

直接在脚本里给dev和start模式分别设置标识变量:

"scripts": {
  "dev": "APP_ENV=dev nodemon app.js",
  "start": "APP_ENV=prod node app.js"
}

如果需要兼容Windows系统,先安装跨平台环境变量工具cross-env:

npm install cross-env --save-dev

再把脚本改成跨平台兼容版:

"scripts": {
  "dev": "cross-env APP_ENV=dev nodemon app.js",
  "start": "cross-env APP_ENV=prod node app.js"
}

你也可以用Node.js通用的NODE_ENV变量替代自定义的APP_ENV,脚本改成:

"scripts": {
  "dev": "cross-env NODE_ENV=development nodemon app.js",
  "start": "cross-env NODE_ENV=production node app.js"
}

2. 在app.js里读取环境变量并处理

通过process.env读取设置的变量,就能判断当前启动模式,同时解决cron的终止问题:

// 读取环境变量,优先用自定义的APP_ENV,没有则用NODE_ENV
const currentMode = process.env.APP_ENV || process.env.NODE_ENV;

if (currentMode === 'dev' || currentMode === 'development') {
  console.log('当前是开发模式,由npm run dev启动');
  
  // 针对cron问题,监听nodemon的终止信号(SIGUSR2),优雅收尾
  process.on('SIGUSR2', () => {
    console.log('nodemon即将终止,开始处理cron任务收尾...');
    // 调用你的cron任务停止方法,比如:yourCronJob.stop();
    // 给任务留足够时间处理完,再退出进程
    setTimeout(() => process.exit(0), 1500);
  });
} else {
  console.log('当前是生产模式,由npm start启动');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:00:54