安装microsoft-cognitiveservices-speech-sdk遇npm获取resolutions超时
问题根因
你在.npmrc里配置timeout=60000不生效是正常的——这个超时根本不是npm原生请求抛出的,而是microsoft-cognitiveservices-speech-sdk包preinstall脚本调用的npm-force-resolutions工具内部硬编码的超时阈值,这个工具本身不会读取npm的timeout配置参数,改npm侧的超时设置对它无效。
你之前查到的加preinstall脚本指定npm-force-resolutions@0.0.3的方案没用,是因为依赖包自身的preinstall脚本执行时机早于项目根目录配置的preinstall脚本,你的配置根本覆盖不到依赖安装阶段的执行逻辑。
可落地的解决方法
按操作成本从低到高排序:
- 最省事方案:安装时直接跳过所有依赖的执行脚本,从根源绕开有问题的preinstall逻辑
这个操作不会影响SDK的正常使用——那个preinstall脚本是SDK开发者做依赖版本对齐用的,对SDK的端侧使用没有影响。如果安装后发现有缺失的后置操作,手动进入npm install microsoft-cognitiveservices-speech-sdk --ignore-scriptsnode_modules/microsoft-cognitiveservices-speech-sdk目录执行npm run postinstall即可。 - 次优方案:全局固定安装稳定版
npm-force-resolutions,让npx优先调用本地固定版本,避免临时拉取最新版触发超时
全局安装完成后重新执行原安装命令即可,此时npx不会走临时拉取流程,0.0.3版本的超时阈值更高,配合正常网络基本不会触发报错。npm install -g npm-force-resolutions@0.0.3 - 网络适配方案:修正.npmrc配置,同时换国内源降低拉取延迟
之前你配置的timeout参数已经是npm的废弃配置,要控制包拉取超时需要用fetch-timeout参数,同时增加重试次数、更换国内镜像源,在项目根目录的.npmrc里添加如下配置:
配置完成后清空npm缓存再重新安装:registry=https://registry.npmmirror.com/ fetch-timeout=120000 fetch-retries=5npm cache clean --force npm install microsoft-cognitiveservices-speech-sdk
避坑提醒:不要试图通过修改项目package.json的preinstall脚本覆盖依赖内的脚本,npm执行依赖生命周期脚本时只会读取依赖包自身的package.json配置,根目录的同名脚本不会在依赖安装阶段触发。
内容的提问来源于stack exchange,提问作者Woodsy
相关产品推荐
相关产品推荐

