npm安装任意包均失败:找不到require-from-string@^1.1.0版本
解决npm找不到require-from-string@^1.1.0的问题
你遇到的核心问题是require-from-string@^1.1.0这个版本已经从npm官方仓库被移除了,而你的依赖链里旧版本的cosmiconfig刚好依赖这个不存在的版本,导致所有npm命令都卡在这个缺失的包上。下面给你几个可行的解决方案:
方案一:用npm shrinkwrap锁定可用版本(适合不想升级Node/npm的情况)
你的npm版本是v5.6.0,不支持后续版本的overrides功能,所以可以通过shrinkwrap来强制指定可用的版本:
- 先在项目根目录创建一个临时的依赖声明(如果已有package.json可以跳过这步):
{ "dependencies": { "require-from-string": "1.2.1" } } - 执行安装命令,先把可用版本装到本地:
npm install - 生成npm-shrinkwrap.json文件,这个文件会覆盖npm默认的依赖解析逻辑:
npm shrinkwrap - 打开生成的
npm-shrinkwrap.json,找到cosmiconfig的依赖部分,把它对require-from-string的版本要求改成"1.2.1"(或者"^1.2.1"),确保指向存在的版本。 - 现在再执行你需要的npm命令(比如
npm install @angular/cli),npm会优先使用shrinkwrap里指定的版本,不会再去找那个已经消失的1.1.0版本。
方案二:升级Node.js和npm到较新版本(推荐,彻底解决)
你的Node.js v8.9.4和npm v5.6.0都是非常老旧的版本,不仅缺少新功能,还存在安全风险。升级到LTS版本可以一劳永逸解决这类依赖问题:
- 下载并安装Node.js的LTS版本(比如v16.x或v18.x,对应npm v8+),安装时直接覆盖现有版本即可。
- 升级完成后,如果你还是遇到依赖问题,可以在项目的
package.json里添加overrides字段,强制指定cosmiconfig使用可用的require-from-string版本:"overrides": { "cosmiconfig>require-from-string": "1.2.1" } - 最后执行你的安装命令:
npm install @angular/cli
补充:验证问题根源
你可以通过这个命令查看旧版本cosmiconfig的依赖(如果npm还能执行的话):
npm view cosmiconfig@3.x dependencies
会看到它确实依赖require-from-string@^1.1.0,而这个版本已经从npm仓库被移除了,这就是所有命令失败的原因。
报错详情
1567 verbose type range 1568 verbose stack require-from-string: No matching version found for require-from-string@^1.1.0 1568 verbose stack at pickManifest (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\pacote\node_modules\npm-pick-manifest\index.js:65:11) 1568 verbose stack at fetchPackument.then.packument (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\pacote\lib\fetchers\registry\manifest.js:52:18) 1568 verbose stack at tryCatcher (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\util.js:16:23) 1568 verbose stack at Promise._settlePromiseFromHandler (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\promise.js:512:31) 1568 verbose stack at Promise._settlePromise (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\promise.js:569:18) 1568 verbose stack at Promise._settlePromise0 (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\promise.js:614:10) 1568 verbose stack at Promise._settlePromises (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\promise.js:693:18) 1568 verbose stack at Async._drainQueue (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\async.js:133:16) 1568 verbose stack at Async._drainQueues (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\async.js:143:10) 1568 verbose stack at Immediate.Async.drainQueues (D:\ProgramFiles\nodejs\node_modules\npm\node_modules\bluebird\js\release\async.js:17:14) 1568 verbose stack at runCallback (timers.js:789:20) 1568 verbose stack at tryOnImmediate (timers.js:751:5) 1568 verbose stack at processImmediate [as _immediateCallback] (timers.js:722:5) 1569 verbose cwd C:\Users\maart\Desktop\test 1570 verbose Windows_NT 10.0.16299 1571 verbose argv "D:\\ProgramFiles\\nodejs\\node.exe" "D:\\ProgramFiles\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "@angular/cli" 1572 verbose node v8.9.4 1573 verbose npm v5.6.0 1574 error code ETARGET 1575 error notarget No matching version found for require-from-string@^1.1.0 1576 error notarget In most cases you or one of your dependencies are requesting 1576 error notarget a package version that doesn't exist. 1576 error notarget 1576 error notarget It was specified as a dependency of 'cosmiconfig' 1577 verbose exit [ 1, true ]
内容的提问来源于stack exchange,提问作者Maartenw
相关产品推荐
相关产品推荐

