npm start执行失败但直接运行node命令正常的问题求助
针对你遇到的RangeError [ERR_BUFFER_OUT_OF_BOUNDS]问题,虽然直接运行node ./src/server.js正常,但npm脚本执行异常,试试下面这些排查步骤:
检查npm脚本的环境变量差异
npm运行脚本时会注入自身的环境变量(比如npm_config_*开头的变量),可能干扰了node的运行。可以在src/server.js最顶部添加一行代码:console.log('ENV from npm:', Object.keys(process.env).filter(k => k.startsWith('npm_')));分别运行
npm start和node ./src/server.js,对比输出的npm相关环境变量,看有没有异常的变量值导致buffer问题。修改npm的脚本shell配置
有时候npm默认的shell会给脚本套一层包装,导致执行环境变化。试试切换npm的脚本shell:- Linux/macOS:运行
npm config set script-shell bash - Windows:运行
npm config set script-shell powershell
之后再执行npm start测试。
- Linux/macOS:运行
强制清理npm缓存
之前的缓存可能残留了异常数据,运行:npm cache clean --force rm -rf node_modules package-lock.json npm install重新安装依赖后再启动。
检查是否存在prestart脚本
npm会自动执行prestart前缀的脚本,如果你的package.json里有"prestart"字段,先注释掉它,再运行npm start,看是不是prestart脚本导致的问题。在npm脚本中指定绝对路径的node
可能npm调用的node版本和你直接运行的不一样(即使nvm切换了版本),先通过which node(Linux/macOS)或where node(Windows)找到node的绝对路径,然后修改scripts:"start": "/usr/local/bin/node ./src/server.js"替换成你自己的node路径再测试。
对比终端环境差异
在package.json里修改start脚本为:"start": "env > npm-env.txt && node ./src/server.js"然后直接运行:
env > direct-env.txt && node ./src/server.js对比两个txt文件的内容,找出行不同的环境变量,排查是否有变量干扰了buffer的写入。
内容的提问来源于stack exchange,提问作者Alan Atrach

