cron任务执行npm show version抛出ERR_STRING_TOO_LONG错误求助
问题:单台服务器执行
npm show命令报字符串过长错误 我配置了一个cron定时任务,用来对比服务器已安装的npm package版本和私有仓库(verdaccio)的最新版本,进而自动更新包,核心命令如下:
REMOTE_VERSION=$(npm show ${PACKAGE_NAME} version) LOCAL_VERSION=$(node -pe "require('./package.json').version") ...
这个定时任务在所有服务器上都能正常运行,但唯独一台服务器执行npm show ${PACKAGE_NAME} version时抛出错误:
npm ERR! code ERR_STRING_TOO_LONG npm ERR! Cannot create a string longer than 0x1fffffe8 characters
我知道0x1fffffe8对应512MB,但这个命令正常返回只有4-5个字符(比如"v0.1.50"),而且本地和其他服务器执行相同命令都没问题。
以下是这台异常服务器的配置信息:
NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/" Node v14.17.3 npm v6.14.13 nvm v0.38.0 pm2 v5.1.0
解决思路
1. 检查npm仓库源配置
这台服务器可能npm源指向异常,导致npm show请求返回了超大冗余内容(比如错误页面、重复数据)。执行命令查看当前源:
npm config get registry
确认是否指向正确的verdaccio私有仓库地址,若不对,重新设置:
npm config set registry https://你的verdaccio私有仓库地址/
2. 清理npm缓存
缓存损坏可能导致读取异常,清理缓存后重试:
npm cache clean --force
3. 修正cron执行环境
cron的执行环境和交互式shell不同,可能缺少nvm、npm的路径配置。可以在定时任务脚本开头添加nvm环境加载:
source ~/.nvm/nvm.sh
或者直接使用npm的绝对路径(通过which npm获取路径)替换命令中的npm。
4. 升级npm/Node版本
当前使用的npm 6.14.13和Node 14.17.3存在已知bug,尝试升级到同大版本的稳定版:
nvm install 14.21.3 --reinstall-packages-from=14.17.3 npm install -g npm@latest
5. 绕开npm命令,直接请求verdaccio API
通过verdaccio的API直接获取版本号,避免npm命令的异常:
REMOTE_VERSION=$(curl -s https://你的verdaccio私有仓库地址/${PACKAGE_NAME}/latest | jq -r '.version')
需要先安装jq工具:sudo yum install jq
内容的提问来源于stack exchange,提问作者fasenderos
相关产品推荐
相关产品推荐

