1

我使用n版本管理器,当我将 Node 版本更改为 11.10 时,NPM 停止工作。

$ n latest
node/11.10.1

$ npm i  sinon
npm ERR! Cannot read property 'resolve' of undefined

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/myuser/.npm/_logs/2019-03-04T22_12_54_458Z-debug.log

$ npm --version
6.7.0

如果我改回以前的 Node 版本——或者任何更早的版本,它就会重新开始工作。

调试日志的完整输出

0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'i', 'sinon' ]
2 info using npm@6.7.0
3 info using node@v11.10.1
4 verbose npm-session d32761bbecba8a12
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 silly fetchPackageMetaData error for sinon@^7.2.7 Cannot read property 'resolve' of undefined
8 timing stage:rollbackFailedOptional Completed in 0ms
9 timing stage:runTopLevelLifecycles Completed in 73ms
10 verbose stack TypeError: Cannot read property 'resolve' of undefined
10 verbose stack     at regFetch (/usr/local/lib/node_modules/npm/node_modules/npm-registry-fetch/index.js:76:23)
10 verbose stack     at fetchPackument (/usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetchers/registry/packument.js:42:10)
10 verbose stack     at packument (/usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetchers/registry/packument.js:20:10)
10 verbose stack     at getManifest (/usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetchers/registry/manifest.js:22:10)
10 verbose stack     at manifest (/usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetchers/registry/manifest.js:13:10)
10 verbose stack     at Object.manifest (/usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetchers/registry/index.js:17:12)
10 verbose stack     at Object.Fetcher#manifest [as manifest] (/usr/local/lib/node_modules/npm/node_modules/genfun/lib/genfun.js:15:38)
10 verbose stack     at manifest (/usr/local/lib/node_modules/npm/node_modules/pacote/lib/fetch.js:23:18)
10 verbose stack     at pinflight (/usr/local/lib/node_modules/npm/node_modules/pacote/manifest.js:24:12)
10 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/promise-inflight/inflight.js:29:24
10 verbose stack     at Promise._execute (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/debuggability.js:313:9)
10 verbose stack     at Promise._resolveFromExecutor (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:483:18)
10 verbose stack     at new Promise (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/promise.js:79:10)
10 verbose stack     at _inflight (/usr/local/lib/node_modules/npm/node_modules/promise-inflight/inflight.js:28:25)
10 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/promise-inflight/inflight.js:22:14
10 verbose stack     at tryCatcher (/usr/local/lib/node_modules/npm/node_modules/bluebird/js/release/util.js:16:23)
11 verbose cwd /tmp/foo
12 verbose Linux 4.15.0-34-generic
13 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "i" "sinon"
14 verbose node v11.10.1
15 verbose npm  v6.7.0
16 error Cannot read property 'resolve' of undefined
17 verbose exit [ 1, true ]
4

2 回答 2

4

对于(仅)11.10 版本的 Node.js,这似乎是一个问题n,或者它如何捆绑 NPM。基本上全局npm安装被破坏了。

如果使用n恢复到早期版本的 Node 和 NPM 并下载相同的有问题的版本 (6.7.0),则可以解决此问题。

n 11.9
npm install -g npm@6.7
n 11.10

这似乎会覆盖 NPM 版本 6.7.0 的现有缓存全局下载并修复安装。即使在 Node 版本之间切换后,该修复程序仍然有效,即使该npm命令每次都重置为指向默认值。这意味着即使您进行npm i npm@6.8 -g了全局升级,npm下次您来回切换到 Node 11.10 时,它也会重置为 6.7。

于 2019-03-04T22:31:39.927 回答
2

您运行的版本是否n早于 v2.1.12?n在 v2.1.12 中进行了更新,以在安装过程中删除以前的 npm node_modules 文件夹,以避免在版本之间更改 npm modules 文件夹的布局和内容时出现问题。

如果您n使用npmthen 安装,短版本:

npm install -g n

长版:

于 2019-03-28T05:05:11.663 回答