无法使用NPM更新BrowserList的故障排查
问题
执行npx update-browserslist-db@latest更新BrowserList时出现以下错误:
/home/tburton/.npm/_npx/2662cbd72e57abb6/node_modules/update-browserslist-db/cli.js:39 throw e ^ SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>) at getLatestInfo (/home/tburton/.npm/_npx/2662cbd72e57abb6/node_modules/update-browserslist-db/index.js:73:15) at updateDB (/home/tburton/.npm/_npx/2662cbd72e57abb6/node_modules/update-browserslist-db/index.js:267:16) at Object.<anonymous> (/home/tburton/.npm/_npx/2662cbd72e57abb6/node_modules/update-browserslist-db/cli.js:34:5) at Module._compile (node:internal/modules/cjs/loader:1198:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1252:10) at Module.load (node:internal/modules/cjs/loader:1076:32) at Function.Module._load (node:internal/modules/cjs/loader:911:12) at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12) at node:internal/main/run_main_module:22:47
已尝试的操作:
- 执行
npm cache clean --force清理缓存 - 更新至最新NPM版本
- 修改package.json中的browserslist配置为:
"browserslist": [ "> 0.2%", "not dead", "last 2 chrome version", "last 2 firefox version", "last 2 safari version" ],
问题依旧,推测本地文件已损坏,请问故障原因是什么,该如何修复?
回答
故障原因
这个错误是update-browserslist-db工具解析JSON文件时遇到了不完整内容(文件提前结束)。从报错栈的getLatestInfo函数来看,核心原因是本地caniuse-lite数据库文件或工具依赖的缓存JSON文件损坏,导致JSON解析失败。
修复步骤
删除本地caniuse-lite文件并重装
先删除项目依赖中的caniuse-lite目录,再重新安装:rm -rf node_modules/caniuse-lite npm install若为全局环境问题,用
npm root -g查看全局依赖路径,删除对应目录下的caniuse-lite后全局重装:rm -rf $(npm root -g)/caniuse-lite npm install -g caniuse-lite强制跳过本地缓存拉取数据
执行命令时添加环境变量,强制工具从远程获取最新数据,不使用本地缓存:BROWSERSLIST_DB_CACHE=false npx update-browserslist-db@latest清理npx临时缓存
npx生成的临时目录(如报错中的/home/tburton/.npm/_npx/2662cbd72e57abb6)可能存在损坏文件,直接删除整个_npx缓存目录:rm -rf ~/.npm/_npx之后重新执行更新命令。
验证package.json格式合法性
确保整个package.json无语法错误(如多余逗号、引号不匹配),用npm命令检查:npm validate
若以上方法都无效,彻底重置项目依赖:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Raystorm
相关产品推荐
相关产品推荐

