Node.js脚本调用无控制台输出问题排查求助
问题分析与解决
你遇到的核心问题是没有让Commander.js解析命令行参数,导致你定义的alive命令完全没有被触发执行,所以终端自然没有任何输出。
具体问题点
Commander.js要求你在定义完所有命令后,必须调用program.parse(process.argv)来解析传入的命令行参数。你的代码里完全漏掉了这一步,所以即使你输入node scripts.js alive,程序也不知道要执行对应的action回调。
另外补充一个小细节:你的代码里第一次输出"testttt"之后,会先等待5分钟(300000毫秒)才会输出第一个i值,不过这不是当前无输出的原因——因为如果命令被触发,"testttt"应该会立刻打印出来。
修正后的完整代码
const program = require('commander'); program.command('alive').action(async function() { console.log("testttt"); function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }; for (let i = 0; i <= 36; i++) { await sleep(300000); console.log(i); }; process.exit(0); }); // 关键:加上这一行,让Commander解析命令行参数 program.parse(process.argv);
关于你尝试的第二种写法
你后来改的循环写法其实没必要,原来的for循环配合await sleep的写法已经很清晰了,不需要额外套then回调,反而会增加代码复杂度。保持第一种循环写法就好。
现在执行node scripts.js alive,你会立刻看到testttt输出,之后每5分钟会依次打印0到36的数字。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

