Переключение версий узлов дает мне `Не удается прочитать свойство 'resol' of undefined` из npm - PullRequest
0 голосов
/ 05 марта 2019

Я использую диспетчер версий n, и когда я изменяю версию узла на 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

Если я вернусь к предыдущей версии узла - или к любой более ранней версии на самом деле,он снова начинает работать.

Полный вывод из журнала отладки

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 ]

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Вы используете версию n старше v2.1.12?n было обновлено в v2.1.12 для удаления предыдущей папки npm node_modules во время установки, чтобы избежать проблем при изменении макета и содержимого папки модулей npm между версиями.

Если вы установили n с использованием npm затем, короткая версия:

npm install -g n

Длинная версия:

0 голосов
/ 05 марта 2019

Похоже, что это проблема с n, или как он связывает NPM, для (только) версии 11.10 Node.По сути, глобальная установка 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, оно будет сброшено до 6,7 при следующем переключении назад и вперед на Узел 11.10.

...