Windows CMD中Node.js console.log无输出问题排查求助
我希望在TS脚本中添加console.log调试代码,但目前无输出。我已在package.json中添加如下配置:
"start": "dotenv -- node --import tsx -e 'require(\"./path/to/my.ts\").myFunction()'",
并通过npm run start执行。此外,以下两条最简测试命令也均无输出:
npx ts-node -e 'console.log("test")'
和
node --import tsx -e 'console.log("test")'
环境信息:
- Node v20.14.0
- NPM 10.2.0
- Windows 10 Pro x64
Windows终端引号解析问题
Windows的CMD/PowerShell对单引号的处理和Unix系终端不同,你用的单引号'不会被正确解析,导致执行的代码并非预期的console.log("test")。
解决办法:将外层单引号换成双引号,内部字符串用单引号,或者转义内部双引号:npx ts-node -e "console.log('test')"node --import tsx -e "console.log('test')"package.json里的start命令同步调整引号:
"start": "dotenv -- node --import tsx -e \"require('./path/to/my.ts').myFunction()\""依赖未正确安装或版本不兼容
即使使用npx,若本地未安装ts-node/tsx,临时下载可能因网络问题导致文件不完整,或者缺少typescript依赖导致TS代码无法正常解析。
解决办法:本地安装核心依赖:npm install -D ts-node tsx typescript模块规范冲突
如果你的项目在package.json中设置了"type": "module"(ES模块规范),用require()导入TS文件会触发错误,导致代码未执行到console.log。
解决办法:改用ES模块的import语法调整start命令:"start": "dotenv -- node --import tsx -e \"import('./path/to/my.ts').then(m => m.myFunction())\""或者移除
package.json中的"type": "module",切换回CommonJS规范。终端输出缓冲问题
极少数情况下,Node的输出缓冲设置会导致console.log内容未即时显示,或者命令输出被意外重定向。
解决办法:在console.log后添加process.stdout.flush()强制刷新输出,或者检查终端是否存在输出重定向操作。
内容的提问来源于stack exchange,提问作者Evgeny

