Nvm-windows: Не удается обновить npm (узел 8.4.0)

Созданный на 7 сент. 2017  ·  127Комментарии  ·  Источник: coreybutler/nvm-windows

Если это вопрос о том, как использовать NVM4W, используйте вместо этого stackoverflow .

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

Моя среда

  • [] Windows 7 или более ранняя версия (на самом деле не поддерживается из-за EOL - подробности см. В вики)
  • [ ] Windows 8
  • [] Windows 8.1
  • [x] Windows 10
  • [] Windows 10 IoT Core
  • [] Windows Server 2012
  • [] Windows Server 2012 R2
  • [] Windows Server 2016

  • [] Моя установка Windows не на английском языке.

Я использую версию NVM4W:

  • [] 1.1.6
  • [x] 1.1.5
  • [] 1.1.4
  • [] 1.1.3
  • [] 1.1.2
  • [] 1.1.1
  • [ ] Старший
  • [] ДРУГОЕ (укажите)

Я уже...

  • [x] прочтите README, чтобы знать о проблемах с npm и антивирусах.
  • [] просмотрел вики, чтобы убедиться, что моя проблема еще не решена.
  • [x] проверено. Я использую учетную запись с правами администратора.
  • [x] проверил проблемы (открытые и закрытые), чтобы убедиться, что это не дубликаты.
  • [] убедился, что это не вопрос о том, как использовать NVM для Windows, поскольку gitter используется для вопросов и комментариев.

Моя проблема связана с (отметьте только те, которые применимы):

  • [] settings.txt
  • [] поддержка прокси (вы пробовали версию 1.1.0+?)
  • [] Поддержка 32- или 64-разрядной версии (Вы пробовали версию 1.1.3+?)
  • [] Экранирование персонажа (Вы пробовали версию 1.1.6+?)
  • [x] Стандартное окружение оболочки (терминал / PowerShell)
  • [] Нестандартное окружение оболочки (Cmder, Hyper, Cygwin, git)

Ожидаемое поведение

npm i -g npm @ latest должен установить последнюю версию npm

Фактическое поведение

ошибка:
npm ERR! path C:\Program Files\nodejs\npm.cmd npm ERR! code EEXIST npm ERR! Refusing to delete C:\Program Files\nodejs\npm.cmd: is outside C:\Program Files\nodejs\node_modules\npm and not a link npm ERR! File exists: C:\Program Files\nodejs\npm.cmd npm ERR! Move it away, and try again.

Шаги по воспроизведению проблемы:

запустить от имени администратора npm i -g npm@latest

help wanted

Самый полезный комментарий

Я просто удаляю файлы npm и npm.cmd из местоположения nodejs, перемещаю dir node_modules/npm из местоположения nodejs в другое место и запускаю node npm-cli.js i -g npm@latest внутри bin dir в перемещенной папке.

Все 127 Комментарий

Здесь та же проблема.

У меня была такая же проблема, и вот как я справился:

запустите npm install -g npm и пока он работает :
удалить (сделать резервную копию) файлы npm.cmd и npm из c:\Program Files\nodejs\
удалить (резервное копирование) .bin папку из c:\Program Files\nodejs\node_modules\npm\node_modules , тогда все должно пройти успешно
Если у вас есть Refusing to delete проблемы с любым другим модулем npm files/folders вам нужно просто удалить их и перезапустить процесс обновления. Для перезапуска скопируйте npm.cmd обратно в c:\Program Files\nodejs\ . Затем, когда npm install -g npm запущен, удалите npm.cmd , иначе вы попадете в проблему Refusing to delete npm.cmd , вы можете повторять этот процесс, пока npm install -g npm будет доволен.

Чтобы удалить файлы, вы можете использовать этот ярлык: mv npm.cmd "c:\Program Files\nodejs\node_modules\npm\node_modules" как предлагает @farnetani

мой env:
windows 7 x64, node 8.4, nvm 1.1.6

image

Видя ту же проблему

самих себя
окна 10
узел 8.5.0
над уровнем моря 5.3.0
nvm 1.1.0

@kuncevic
Более простое решение - скопировать dir node_modules/npm из местоположения nodejs, удалить npm bin и cmd и запустить node npm-cli.js i -g npm@latest внутри bin dir в скопированной папке.

Вот вам и продакшн. Удачи в сценарии.

Они должны переименовать непрерывную интеграцию в непрерывную интеграцию.

@ 19majkel94 Не могу заставить его работать с вашим методом ... любые другие идеи, которые я мог бы написать?

Похоже, что npm изменил способ обновления ... никому не сообщая. npx также был представлен только с незначительным изменением версии (в отличие от существенного изменения) .... что _смысленно_ правильно, но по-прежнему трудно следовать.

По-видимому, происходит некоторая песочница файлов. Я провел большую часть сегодняшнего дня, исследуя и пытаясь исправить, но каждое исправление обнаруживает другую проблему. Потерпи, я исправлю это, как только смогу. Я единственный, кто работает над этим на данный момент ... и я как раз нахожусь в процессе запуска другого продукта (после 2 лет работы), так что PR с радостью будет принят.

Хотел бы я помочь, но у меня есть наблюдение ... Я думаю, что проблемы связаны с ярлыком " C:/Program Files/nodejs ". Возможно, если бы вместо ярлыка использовали перекресток? Windows не может отличить «настоящий» каталог от соединения. Таким образом, похоже, что узел действительно установлен в каталог по умолчанию. Больше не нужно «работать» в каталоге за пределами разрешенного каталога.

https://docs.microsoft.com/en-us/sysinternals/downloads/junction

Кстати, использование соединения должно защитить nvm4w от любых будущих изменений в поведении npm.

@ wayne-oscme
Вы читали ридми?

Второй вариант - использовать символическую ссылку. Эта концепция требует поместить символическую ссылку в системный PATH, а затем обновить ее цель до каталога установки узла, который вы хотите использовать. Это простой подход, и кажется, что это то, что люди рекомендуют ... пока они не поймут, насколько проблематичны символические ссылки в Windows. Поэтому раньше этого не происходило.

Чтобы создать / изменить символическую ссылку, вы должны работать как администратор и обойти Windows UAC (это раздражающее приглашение). К счастью, это проблема, которую я уже решил с помощью некоторых вспомогательных скриптов в окнах узлов. В результате NVM для Windows поддерживает одну символическую ссылку, которая помещается в системный PATH только во время установки. Переключение на разные версии узла - это вопрос переключения цели символической ссылки. В результате эта утилита не требует, чтобы вы запускали nvm use xxx каждый раз, когда вы открываете окно консоли. Когда вы запускаете nvm use xxx, активная версия узла автоматически обновляется во всех открытых окнах консоли. Он также сохраняется между перезагрузками системы, поэтому вам нужно использовать nvm только тогда, когда вы хотите внести изменения.

@ 19majkel94
Прочтите, пожалуйста, о развязках. «Символьная ссылка», также известная как ярлык окна, имеет проблемы с разрешением целевого каталога из процессов. Хотя проводник и терминал окна, кажется, хорошо с ними справляются, в других процессах они обрабатываются плохо. Откройте блокнот, выберите «Открыть файл», чтобы открыть диалоговое окно с файлом стандартного окна. Перейдите к "C:/Program Files/nodejs" и посмотрите, где вы закончите.

Перенаправление в целевой каталог, в котором, как мы видим, заканчиваются процессы, может привести к некоторым интересным проблемам.

Переходы эквивалентны жестким ссылкам в * nix. Windows поддерживает их только для каталогов, а не для файлов, но это все, что нам здесь нужно. Это не перенаправления. Во всех смыслах и целях они представляют собой каталог, ничем не отличающийся от пути, созданного при первом создании каталога.

Они не перенаправляют, они - пункт назначения. Их можно удалить и создать заново с помощью каждой команды «использовать». Следовательно, они будут иметь те же эффекты и возможности, что и ярлыки, но не будут иметь никаких недостатков, которые создают текущую проблему.

Это не имеет ничего общего с соединениями / жесткими ссылками / символическими ссылками. @kuncevic предоставил снимок экрана с ошибками npm, ключевой частью которых является Refusing to delete ... which is outside of .... . Это жестко закодированное сообщение в npm, предотвращающее дальнейшие операции. Итог: npm отказывается от полного обновления.

Это не казалось проблемой до npm 5.xx, и я все еще копаюсь в деталях, чтобы выяснить, что изменилось. Возможно, мне придется написать обходной путь (например, взломать), который мне никогда не нравился. Я также изучаю возможности использования пакетов msi, которые кажутся единственным способом привлечь внимание людей в npm.

Если вам крайне необходимо обновить npm, вы можете загрузить его через https://github.com/npm/npm/archive/vX.X.X.zip и извлечь в каталог node_modules корневого каталога установки вашего узла. Вам нужно будет вручную создать символическую ссылку в _node installation root_ на npm.cmd и npx.cmd . Окончательная структура файла должна выглядеть примерно так:

nvm
- v8.5.0
   - node_modules
       - npm
          - bin
               - npm.cmd
               - npx.cmd
          ...
   - node.exe
   - npm.cmd (symlink to v8.5.0/node_modules/npm/bin/npm.cmd)
   - npx.cmd (symlink to v8.5.0/node_modules/npm/bin/npx.cmd)

Ладно, думаю, мне стоит попробовать перед продажей. Я заменил ярлык на
перекресток и получил ту же самую проблему. Думал, у меня там что-то есть.
Извините, что потратил ваше время.

В среду, 27 сентября 2017 г., в 9:38, Кори Батлер [email protected]
написал:

Это не имеет ничего общего с соединениями / жесткими ссылками / символическими ссылками. @kuncevic
https://github.com/kuncevic предоставил снимок экрана с ошибками npm,
ключевой частью является отказ от удаления ... что находится за пределами ... этого
- это жестко закодированное сообщение в npm, предотвращающее дальнейшие операции. Нижняя граница:
npm отказывается полностью обновляться.

Это не казалось проблемой до npm 5.xx, и я все еще копаюсь
через детали, чтобы выяснить, что изменилось. Мне, возможно, придется написать
обходной путь (т.е. взлом), который мне никогда не нравился. Я также изучаю
используя пакеты msi, что кажется единственным способом получить
внимание людей в npm.

Если вы остро нуждаетесь в обновлении npm, вы можете скачать его через
https://github.com/npm/npm/archive/vX.XXzip и распакуйте его в
каталог node_modules корневого каталога установки вашего узла. Вам нужно будет
вручную создайте символическую ссылку в корне установки узла на npm.cmd и
npx.cmd. Окончательная структура файла должна выглядеть примерно так:

nvm

  • v8.5.0

    • node_modules



      • npm





        • мусорное ведро







          • npm.cmd




          • npx.cmd




            ...










    • node.exe

    • npm.cmd (символическая ссылка на v8.5.0 / node_modules / npm / bin / npm.cmd)

    • npx.cmd (символическая ссылка на v8.5.0 / node_modules / npm / bin / npx.cmd)

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/coreybutler/nvm-windows/issues/300#issuecomment-332523342 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AEZgRbY_GVys0bfnD_kaM_PYl6QUmZKDks5smk_PgaJpZM4PPcf-
.

Только что обновил 5.4.1 → 5.4.2 без проблем.

c:\>npm install npm -g
C:\Program Files\nodejs\npx -> C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js
C:\Program Files\nodejs\npm -> C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js
+ [email protected]
removed 1 package and updated 2 packages in 12.125s

@kuncevic - спасибо ... это указывает на то, что проблема должна быть в пределах npm 5.4.3+.

npm -g install [email protected] все еще не работает для меня, те же ошибки.
[Edit] Кстати, начиная с версии 5.3.0, которая была установлена ​​с помощью nvm install 8.5.0

Пт, 29 сентября 2017 г., 11:41, Кори Батлер [email protected]
написал:

@kuncevic https://github.com/kuncevic - спасибо ... это показательно
проблема должна быть в пределах npm 5.4.3+.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/coreybutler/nvm-windows/issues/300#issuecomment-333161774 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AEZgRQnw_jxuz_dDZl3OsZVO_MNkHlBGks5snQ-qgaJpZM4PPcf-
.

Для меня это не работает с Node 8.4.0 и выше. Он устанавливает NPM 5.3.0, а затем не позволяет мне его обновить.
Старые версии Node (у меня 4.8.4) позволяют нормально обновлять NPM.

Мужчина. npm 5 и nvm действительно отстой (но я виню здесь npm 5, поскольку 4 работает отлично). На прошлой неделе я перешел на npm 4.6.1 и просто попытался еще раз попробовать 5.4.2. Похоже, что npm был удален при попытке установить react-native-cli, совершенно другой пакет:

Manuel@Manuel-406 /cygdrive/d/htdocs/wallet
$ npm install -g react-native-cli
C:\Program Files\nodejs\npx -> C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js
npm WARN Error: EPERM: operation not permitted, scandir 'C:\Program Files\nodejs\node_modules\npm\node_modules\libnpx\node_modules\yargs\node_modules\os-locale\node_modules\execa\node_modules\cross-spawn\node_modules\shebang-command\node_modules'
npm WARN  { Error: EPERM: operation not permitted, scandir 'C:\Program Files\nodejs\node_modules\npm\node_modules\libnpx\node_modules\yargs\node_modules\os-locale\node_modules\execa\node_modules\cross-spawn\node_modules\shebang-command\node_modules'
npm WARN   stack: 'Error: EPERM: operation not permitted, scandir \'C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\libnpx\\node_modules\\yargs\\node_modules\\os-locale\\node_modules\\execa\\node_modules\\cross-spawn\\node_modules\\shebang-command\\node_modules\'',
npm WARN   errno: -4048,
npm WARN   code: 'EPERM',
npm WARN   syscall: 'scandir',
npm WARN   path: 'C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\libnpx\\node_modules\\yargs\\node_modules\\os-locale\\node_modules\\execa\\node_modules\\cross-spawn\\node_modules\\shebang-command\\node_modules' }
npm ERR! path C:\Program Files\nodejs\npm
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall open
npm ERR! Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!  { Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!   cause:
npm ERR!    { Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!      errno: -4048,
npm ERR!      code: 'EPERM',
npm ERR!      syscall: 'open',
npm ERR!      path: 'C:\\Program Files\\nodejs\\npm' },
npm ERR!   stack: 'Error: EPERM: operation not permitted, open \'C:\\Program Files\\nodejs\\npm\'',
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'open',
npm ERR!   path: 'C:\\Program Files\\nodejs\\npm',
npm ERR!   parent: 'v8.5.0' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Manuel\AppData\Roaming\npm-cache\_logs\2017-10-02T14_54_04_833Z-debug.log

Manuel@Manuel-406 /cygdrive/d/htdocs/_git/wallet
$ npm install -g react-native-cli
sh: npm: Kommando nicht gefunden.
  • ubuntu : 16.04.2 LTS
  • nodejs : 8.6.0
  • npm : 5.3.0
npm i -g npm<strong i="15">@latest</strong>

/home/user/.npm-global/bin/npm -> /home/user/.npm-global/lib/node_modules/npm/bin/npm-cli.js
/home/user/.npm-global/bin/npx -> /home/user/.npm-global/lib/node_modules/npm/bin/npx-cli.js
+ [email protected]
added 68 packages, removed 164 packages and updated 14 packages in 14.307s

npm -v прежнему печатает 5.3.0 и не обновляется?

@yavorski - это nvm для Windows. Я думаю, вам нужен nvm для * nix .

Я подтвердил, что эта проблема - песочница в npm 5.xx В предыдущих выпусках npm этого не было. К сожалению, исправление нетривиальное и, судя по опыту @yavorski , не относится к этому проекту.

Да нет nvm в моем случае. Linux + Nodejs из nodeource.

Имея такую ​​же проблему здесь ...

npm версии 5.4.2
версия узла 8.7.0
окно 10

У меня та же проблема.

Windows 10
mv npm.cmd "c:\Program Files\nodejs\node_modules\npm\"

и после

npm i -g npm@latest

Решено для меня!

У меня аналогичное поведение с Node v8.9.0. Он поставляется с npm 5.5.1, и когда я пытаюсь перейти на npm 4, он выдает ошибку refusing to delete .

Я попытался исправить это вручную, вытащив npm из официального zip-файла, и получил такую ​​ошибку:
image

Я подозреваю, что эта ошибка возникает незаметно и мешает установке. Когда я устанавливаю на C:\nvm , я не получаю эту ошибку, и все работает должным образом.

@RichardMisiak , вы пытались переместить установку nvm на путь ближе к C:\ ? Нравится C:\nvm ? Это прояснило для меня проблему.

С последним узлом 9.1 который по умолчанию приносит последний npm 5.5.1 , еще больше "веселья" https://github.com/npm/npm/issues/19019 , говоря со следующим npm релиз это может быть исправлено.

Мое решение НЕ очень элегантное, но оно работает. Вот.
После запуска npm install [email protected] -g я получил следующую ошибку:

npm ERR! path d:\node\npm.cmd
npm ERR! code EEXIST
npm ERR! Refusing to delete d:\node\npm.cmd: is outside d:\node\node_modules\npm and not a link
npm ERR! File exists: d:\node\npm.cmd
npm ERR! Move it away, and try again.
...

Мой обходной путь был следующим:

  1. npm install -g yarn
  2. Перезагрузите компьютер
  3. Запустите yarn global bin и добавьте отображаемую папку в переменную окружения PATH в Windows.
  4. Перейдите в папку, где находится npm.cmd (проверьте это по ошибке, которую мы только что получили на npm install [email protected] -g run: d:\node\ в моем случае) и:
    2.1. Переименуйте npm в npm.original (или просто удалите)
    2.1. Переименуйте npm.cmd в npm.cmd.original (или просто удалите)
  5. Закройте терминал и откройте новый
  6. yarn global add [email protected]
  7. npm install [email protected] -g (это установит npm с использованием версии npm, расположенной в папке yarn global bin )
  8. yarn global remove npm (чтобы удалить версию npm, установленную yarn, и оставить только версию, установленную самим npm)

Просто переименуйте пакет ПЕРЕД обновлением:
запустить cmd

cd %ProgramFiles%\nodejs
ren npm.cmd npm2.cmd
ren npm npm2 
npm2 install npm<strong i="7">@latest</strong> -g

удалите файлы после обновления:

del npm2
del npm2.cmd

@ rolf-schmidiger По моему опыту, мне приходилось делать то же переименование с npx и npx.cmd, что и с npm и npm.cmd.

Восхитительно простой и эффективный, @ rolf-schmidiger. Спасибо.

@coreybutler , есть идеи по

Ни одно из перечисленных здесь решений не помогло мне, и, в конце концов, было быстрее использовать nvmw uninstall для удаления установки узла, а затем nvmw install для его повторной установки.

Разве nvmw совсем другой инструмент?

@thegreatco Ой! Вы правы. Интересно, что одна и та же проблема возникает на обоих!

Основываясь на ответе @ rolf-schmidiger, я создал для него скрипт обновления ... Отстой, что это единственный способ заставить его работать.

#!/usr/bin/bash

cd "$PROGRAMFILES"/nodejs
mv npm.cmd npm2.cmd
mv npm npm2
npm2 install -g npm<strong i="6">@latest</strong>
rm npm2
rm npm2.cmd

ОБНОВИТЬ

Это последнее, что у меня работает.

#!/usr/bin/bash

cd "$PROGRAMFILES"/nodejs
rm npm npx npm.cmd npx.cmd
mv node_modules/npm node_modules/npm2
node node_modules/npm2/bin/npm-cli.js i -g npm<strong i="12">@latest</strong>
rm -rf node_modules/npm2/

Я только что установил все в первый раз, поэтому ни одно из приведенных выше предложений, похоже, мне не подходит. Я получаю это при попытке выполнить npx create-react-app :

npx : The term 'npx' is not recognized as the name of a cmdlet, function, script file, or operable program. Check
the spelling of the name, or if a path was included, verify that the path is correct and try again.

Windows 10 Pro, сборка 1703, свежая переустановка около 2 недель назад с включенным режимом разработчика
Версия узла 9.4.0
нпм 5.6.0

Инструкции по установке были немного запутанными (нужно загрузить несколько файлов, для чего нужен этот файл без установки?), Но я наконец понял, что вам нужно включить nvm, а затем ввести команду `` использовать '' (запутано меня, потому что я не использую отдельный диспетчер пакетов, поэтому я подумал, что эта часть не применима), но тогда я все еще получаю указанную выше ошибку.

Я перепробовал все возможное. Я удалил nvm и установил другую версию, я проверил путь к среде, у меня закончились идеи. Наконец-то я сделал npm install -g npx и, похоже, это работает. К черту это.

Я просто удаляю файлы npm и npm.cmd из местоположения nodejs, перемещаю dir node_modules/npm из местоположения nodejs в другое место и запускаю node npm-cli.js i -g npm@latest внутри bin dir в перемещенной папке.

У меня такая же проблема (среда Windows 10) при попытке обновить мой узел 8.8.0 с npm 5.5.1 до узла 9.8.0, но установка узла 9.8.0 не обновляет мой npm с 5.5.1 до последней версии. После этого я пытаюсь npm i -g npm и получаю ошибку:

C:\Repository\myproject>npm i -g npm
npm WARN npm npm does not support Node.js v9.8.0
npm WARN npm You should probably upgrade to a newer version of node as we
npm WARN npm can't make any promises that npm will work with this version.
npm WARN npm Supported releases of Node.js are the latest release of 4, 6, 7, 8.
npm WARN npm You can find the latest version at https://nodejs.org/
WARNING: You are likely using a version of node-tar or npm that is incompatible with this version of Node.js.
Please use either the version of npm that is bundled with Node.js, or a version of npm (> 5.5.1 or < 5.4.0) or node-tar (> 4.0.1) that is compatible with Node.js 9 and above.
npm[19860]: src\node_zlib.cc:436: Assertion `args.Length() == 7 && "init(windowBits, level, memLevel, strategy, writeResult, writeCallback," " dictionary)"' failed.
 1: node::DecodeWrite
 2: node::DecodeWrite
 3: uv_loop_size
 4: v8::internal::wasm::SignatureMap::Find
 5: v8::internal::Builtins::CallableFor
 6: v8::internal::Builtins::CallableFor
 7: v8::internal::Builtins::CallableFor
 8: 000003BEBC8843C1

Решение @arfaWong отлично сработало для меня (я немного смешал с решением @rolf-schmidiger и переименовал вместо перемещения)

Это очень просто .. Если у вас Windows, проверьте https://github.com/felixrieseberg/npm-windows-upgrade
Если вы хотите сделать это вручную, проверьте документацию https://github.com/npm/npm/wiki/Troubleshooting#upgrading -on-windows

Я бросил вместе PowerShell скрипт для автоматизации @arfaWong «s решение : https://gist.github.com/noahleigh/ba34e18b3e0bc4a6a4e93ed7a480536e

Протестировано на PowerShell Core 6.0

Та же проблема с

node-v8.6.0-win-x64
node-v9.9.0-win-x64

и если вы переименуете файл или переместите их, не удастся создать папку, перезапустите как администратор. Принимая во внимание тот факт, что у меня нет прав администратора на этой машине, сомнительно, что это что-то изменит, поскольку текущий пользователь имеет разрешения mkdir в этой папке ...

Когда это когда-нибудь будет исправлено?

@arfaWong скалы !!

Я использовал cmder , nvm 1.1.6 и node 8.10.0
Обновлено с npm 5.6.0 до 5.8.0: tada:

cd %programfiles%/nodejs
rm npm npm.cmd
mv node_modules/npm node_modules/npm2
node node_modules\npm2\bin\npm-cli.js i npm<strong i="17">@latest</strong> -g
rm -rf npm2

спасибо за решение @ayvarot
Я использовал nvm 1.1.15 и node 9.8.0
Обновлено с 5.6.0 до 5.8.0

Решение @ayvarot частично сработало для меня. Может быть, из-за того, что я запускал его на msys git bash с ConEmu? Во всяком случае, это мой скорректированный фрагмент:

which npm && \
    cd "`which npm | xargs -0 dirname`" && \
    mv npm npm2 && \
    mv npm.cmd npm2.cmd && \
    mv ./node_modules/npm ./node_modules/npm2 && \
    node node_modules/npm2/bin/npm-cli.js i npm<strong i="7">@latest</strong> -g && \
    rm -r npm2 npm2.cmd ./node_modules/npm2

npm -v

(Использование nvm 1.1.6 на узле 8.10.0 x32 и обновление с npm 5.6.0 до 5.8.0)

@arfaWong Это сработало ... Хотя и не идеально ...
Будем ждать, пока команда npm исправит это ...
.
Столкнулся с этим с npm 5.6.0

Обычная версия @ayvarot для Windows DOS

pushd %ProgramFiles%\nodejs
del npm npm.cmd
move node_modules\npm node_modules\npm2
node node_modules\npm2\bin\npm-cli.js i npm<strong i="8">@latest</strong> -g
rd node_modules\npm2 /S /Q
popd

Решение @arfaWong отлично сработало, спасибо!

Windows 10:
cd (ваша папка nodejs)
ren npm.cmd npm2.cmd
дель нпм
del npx

npm2 установить npm -g

дель npm2.cmd

Я просто переименовал npm и npx кстати, а потом удалил их, но я думаю, что их можно просто удалить сразу.

Кажется, теперь это вызвано установкой Nodejs версии 10.0.0 с использованием nvm.

@arfaWong Единственное решение, которое сработало, ребята. Попробуйте это.

@ rolf-schmidiger работал у меня! благодарю вас

Я обошел это с помощью Yarn, которую я уже установил.

nvm use 10.0.0

# Have npm remove itself
npm uninstall -g npm

# Install npm into the yarn directory structure
yarn global add npm

# Use npm to install itself into the nodejs directory structure
npm install -g npm

# Remove the yarn installation of npm
yarn global remove npm

Это сработало для меня:

nvm use <some_other_version>
cd .../nvm/<version_to_update>
npm un npm
npm i npm<strong i="6">@latest</strong>

используйте yarn вместо npm, попробуйте yarn global add npm@latest , попробуйте обновить yarn, если это не поможет.

Я также получил ошибку отказа при удалении при попытке обновить npm с помощью npm install npm<strong i="6">@latest</strong> --global .

Пакет npm-windows-upgrade также не смог обновить, предлагая переустановить Node.js, несмотря на то, что это была свежая распакованная установка.

Мне удалось выполнить обновление, переместив файлы npm и npx, как предлагалось ранее, с помощью этого сценария PowerShell:

# Locate the Node.js installation
# containing the npm and npx files that are preventing the upgrade
Get-Command node.exe | % { Split-Path $_.Source } | cd

$CurrentNpmVersion = npm --version

# Version the current npm scripts to make room for the new version:
"npm", "npm.cmd", "npx", "npx.cmd" | %{ Get-ChildItem -Filter $_ } |
  Rename-Item -NewName { "$($_.BaseName)-$CurrentNpmVersion$($_.Extension)" }

# Use the current npm command to install the new version:
Invoke-Expression "npm-$($CurrentNpmVersion).cmd install npm<strong i="11">@latest</strong> --global"

Привет @awarberg Я пробовал ваш сценарий, но получаю эту ошибку. Я тоже пробовал с пряжей, не повезло ... тупая винда! 💢

.\update_node.ps1
npm ERR! path C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\.bin\errno
npm ERR! code EEXIST
npm ERR! Refusing to delete C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\.bin\errno: is outside C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\errno and not a link
npm ERR! File exists: C:\Program Files\nodejs\node_modules\npm\node_modules\worker-farm\node_modules\.bin\errno
npm ERR! Move it away, and try again.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\vitom\AppData\Roaming\npm-cache\_logs\2018-05-11T12_55_55_902Z-debug.log

@lamuertepeluda жаль слышать, что вы все еще не можете обновиться. Упомянутый файл ...\node_modules\.bin\errno ранее не упоминался. Это может быть поврежденная установка из-за нескольких попыток обновления. Может быть, самое время переустановить его, как предлагает npm-windows-upgrade.

Насчет "тупой винды" не согласен. Скорее всего, NPM сначала был разработан для Linux, а поддержка Windows была добавлена ​​позже, как после размышлений. Я регулярно вижу это и в других пакетах NPM. Типичные проблемы - это сложность установки, требующая ручных и недокументированных действий для обеспечения необходимых программных компонентов. Другая распространенная проблема - это путь к файловой системе с учетом регистра.

Я сделал пакетный скрипт для автоматического запуска решения @arfaWong , если кому-то интересно.

<strong i="7">@echo</strong> off
SETLOCAL EnableDelayedExpansion

if [%1] == [] (
    echo Pass in the version you would like to install, or "latest" to install the latest npm version.
) else (
    set wanted_version=%1

    if "!wanted_version!" == "latest" (
        for /f %%i in ('npm show npm version') do set wanted_version=%%i
    )

    for /f %%i in ('npm -g -v') do set cur_version=%%i

    if "!cur_version!" == "!wanted_version!" (
        echo Already on npm version !wanted_version!.
    ) else (
        echo Updating to !wanted_version!...

        set node_path=!PROGRAMFILES!\nodejs

        rename "!node_path!\npm" npm2
        rename "!node_path!\npm.cmd" npm2.cmd
        rename "!node_path!\node_modules\npm" npm2
        node "!node_path!\node_modules\npm2\bin\npm-cli.js" i npm@!wanted_version! -g

        for /f %%i in ('npm -g -v') do set new_version=%%i

        echo New version installed is !new_version!

        if "!new_version!" == "!wanted_version!" (
            echo Successfully updated to !wanted_version!. Cleaning up backups...
            del "!node_path!\npm2"
            del "!node_path!\npm2.cmd"
            <strong i="8">@RD</strong> /S /Q "!node_path!\node_modules\npm2"
            echo Update complete.
        ) else (
            echo Something went wrong. Rolling back.
            if exist "!node_path!\npm" (
                del "!node_path!\npm"
            )
            if exist "!node_path!\npm.cmd" (
                del "!node_path!\npm.cmd"
            )
            if exist "!node_path!\node_modules\npm" (
                <strong i="9">@RD</strong> /S /Q "!node_path!\node_modules\npm"
            )
            rename "!node_path!\npm2" npm
            rename "!node_path!\npm2.cmd" npm.cmd
            rename "!node_path!\node_modules\npm2" npm
        )
    )
)

Я создал суть из сценария летучей мыши

https://gist.github.com/johnmcase/d31b799b9030327091a0e74880e4c530

- Редактировать: обновлено, чтобы отразить обновленный сценарий @kufii выше

@johnmcase хорошая идея, я обновил свой комментарий, чтобы вы могли передать версию, которую хотите установить, в качестве аргумента (или "последнюю", чтобы получить последнюю версию)

Обновленная версия @kufii работает для меня лучше, чем жестко запрограммированный желаемый номер в скрипте.

@kufii @arfaWong

Спасибо!!
notworthy

@johnmcase Сработал понравился

Обнаружена только одна проблема с этим скриптом: когда я выбрал установку 5.6 он успешно установил 5.6.0 и выполнял откат, поскольку "5.6" отличается от "5.6.0" ...
Спасибо за сценарий!

Недавно была такая же проблема с nvm версии 1.1.7
Решение @arfaWong и @ayvarot сработало последний раз. Но на этот раз Idkw папку npm найти не удалось. Поэтому рекомендую на всякий случай не удалять папку npm2.

Я потратил почти два дня на отладку ошибок, вызванных этой проблемой, и попробовал почти все исправления для обновления моего NPM с 5.6.0 до 6.1.0. Исправление @arfaWong сработало для меня без каких-либо проблем. Спасибо!

@arfaWong Работает !!

Я использовал метод пряжи, но он тоже должен работать:

  1. Возьмите npm с https://github.com/npm/cli/releases
  2. Запустите следующее из каталога, в который вы его извлекли, из папки bin

    • node npm-cli.js i -g npm@latest

    • Он может жаловаться на файлы, которые необходимо удалить, для меня мои nvm и nodejs были в корневом каталоге на моем диске, поэтому стандартное расположение файла программы для меня неприменимо. Я удалил npm / npx / node_modules из моей папки nodejs (я не боюсь повторно загружать пакеты, и в любом случае я работаю с новой установкой).

  3. Он должен быть установлен правильно, и вы сможете удалить извлеченную папку и получить прибыль!

Довольно похоже на этот stackoverflow, который я написал.
https://stackoverflow.com/questions/49748307/how-to-reinstall-npm

@ayvarot Большое спасибо !!!!!!!! Ваш совет работает для меня в Windows 10.

Работал для меня с простым переименованием %Node%\npm.cmd , %Node%\npm и %Node%\npx.cmd , переименование каталога не требовалось.

Предлагаемое решение @peternann здесь тоже работает.
https://github.com/coreybutler/nvm-windows/issues/389

По какой-то причине приведенный выше сценарий не работал у меня, и я просто слишком устал решать эту проблему, чтобы понять, почему.

Эта нелепая ошибка все еще сохраняется, поэтому я сделал сценарий, который выполняет свою работу. Должен быть помещен в папку Node, где находится npm.cmd live.

:: Update NPM with workaround of "npm ERR! code EEXIST" bug https://github.com/coreybutler/nvm-windows/issues/300

<strong i="7">@ECHO</strong> OFF

SETLOCAL

SET CDir=%~dp0%

REN "%CDir%\npm.cmd" "npm1.cmd"
DEL "%CDir%\npm"
DEL "%CDir%\npx.cmd"
DEL "%CDir%\npx"

CALL "%CDir%\npm1.cmd" update && DEL "%CDir%\npm1.cmd"

Сохраните это как npmup.cmd и используйте вместо npm update

при использовании скрипта @kufii
Обратите внимание, что место установки следует заменить, если вы изменили путь к node.js, как я, просто замените код set node_path=!PROGRAMFILES!\nodejs на set node_path=YOUR_NODE_PATH

Решение @kraihn теперь не работает с последней пряжей, если вы не добавите корзину для пряжи в путь:

  1. получить корзину path по yarn global bin
  2. вставьте корзину для пряжи path в свою переменную path

Раз в год я взволнован, решаю установить NVM в Windows, думая, что «на этот раз все будет работать», но всегда что-то ломается ... Ну, я думаю, это снова классический установщик Node.js. Я бы использовал WSL, но, к сожалению, для некоторых приложений Electron требуется, чтобы на хост-ОС был установлен Node.

Неужели это действительно не исправить только с помощью NVM?
Насколько я читал в разных темах, это также может быть проблема npm или узла, но разве только NVM не может с этим поделать? В противном случае такая проблема делает NVM бесполезным в Windows.
Необходимость самостоятельно удалять файлы в процессе обновления или даже создавать сценарии для этого или любые обходные пути, упомянутые некоторыми людьми, не является решением. Это ад!
Единственное, что я пробовал (комментарий в другом потоке, не в этом, упоминающий несколько шагов о том, как использовать yarn для добавления npm), не сработало.

@MrCroft, хотя я согласен с тем, что было бы неплохо, если бы это «просто работало», вещи далеки от «ада» и даже дальше от «бесполезности».
Я являюсь счастливым пользователем этого проекта уже около 2 лет.
Эта проблема возникает только тогда, когда вы хотите обновить сам глобальный npm. Установка новых версий узлов через nvm не вызывает проблем, и новые узлы поставляются с новыми пакетами npm.
Если вы обнаружите, что обновляете npm в своей среде разработки так часто, что ваша жизнь превращается из-за этого в ад, то вы, вероятно, делаете что-то не так.
Я думаю, только дважды с тех пор, как я стал пользователем nvm, мне пришлось обновить сам npm и столкнуться с этой проблемой. Не так плохо, как вы думаете.

Вот мой сценарий обновления npm на nvm:

https://stackoverflow.com/a/50955293/491553

Я только что сделал это при новой установке. Работает отлично.

Может быть, кому-то стоит протестировать программу обновления npm БЕЗ ПРАВ АДМИНИСТРАТОРА ...

Я думаю, что это скорее ошибка предыдущей версии npm, чем ошибка nvm .

Однако для обновления npm delete в папке nvm/[node version] (для меня это v10.15.3 ) следующие файлы:

C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npm
C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npm.cmd
C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npx
C:\Users\[user name]\AppData\Roaming\nvm\[node version]\npx.cmd

Переименуйте папку npm в npm2

C:\Users\[user name]\AppData\Roaming\nvm\[node version]\node_modules\npm2

Откройте любую консоль с правами администратора (или даже щелкните правой кнопкой мыши ярлык vscode, затем щелкните правой кнопкой мыши код Visual Studio и нажмите Запуск от имени администратора ) и введите команды:

cd C:\Users\[user name]\AppData\Roaming\nvm\[node version]\node_modules\npm2\bin
node npm-cli.js i -g npm<strong i="22">@latest</strong>

Обновление: как указал @ Fr0sT-Brutal, права администратора на этом этапе не нужны, потому что мы только что удалили файлы, которые создавали конфликты 👍

Готово.

Удалите папку C:\Users\[user name]\AppData\Roaming\nvm\[node version]\node_modules\npm2 .

(Это всего лишь шаг за шагом воспроизвести то, что @ 19majkel94 сказал выше)

@createdbyjurand : БЕЗ прав администратора ...
Вам не нужны права администратора, чтобы заменить кучу файлов другой кучей файлов ...
(если у вас есть доступ на запись к файлам / каталогам)

@createdbyjurand : БЕЗ прав администратора ...
Вам не нужны права администратора, чтобы заменить кучу файлов другой кучей файлов ...
(если у вас есть доступ на запись к файлам / каталогам)

Я знаю. Но папка Program Files в Windows 10 имеет определенные права доступа. Вот почему в последнее время многие приложения устанавливаются в папки Roaming или Local. Даже Visual Studio Code имеет две отдельные установки. Один для локальных и один для программных файлов. Один из способов решения этой проблемы - изменить расположение папки nvm nodejs. Во-вторых, измените параметры безопасности папки, но это сделает эту папку незащищенной. То, что я написал, то, что написал @ 19majkel94 , - это решение для исправления обновления npm таким, как оно есть, с использованием стандартной установки nvm с настройками по умолчанию для людей, которые просто хотят решить проблему, не вдаваясь во все новые и новые изменения системы или конфигурации. Потому что даже если вы измените папку или права доступа, вам все равно придется выполнить все перечисленные мной шаги, и единственное изменение будет заключаться в использовании консоли без прав администратора.

@createdbyjurand : хочу сказать, что мы запускаем node в корпоративной среде, и как разработчики у нас нет прав администратора. Если npm-update или скрипт в нем требуют прав администратора, это нарушает нашу среду разработки, и тогда мы не можем установить какие-либо пакеты узлов, и тогда мы не сможем работать.

@createdbyjura, а для чего нужны права администратора?

@createdbyjura, а для чего нужны права администратора?

Хорошее замечание, нет, потому что я только что удалил файлы, которые создавали конфликты 👍

О, я вижу. Я никогда не думал, что NPM будет установлен в PF, для меня это довольно странно. Я бы сказал, что именно те, кто это делает, являются причиной своих бед :).

О, я вижу. Я никогда не думал, что NPM будет установлен в PF, для меня это довольно странно. Я бы сказал, что именно те, кто это делает, являются причиной своих бед :).

В последнее время да. Microsoft изменила права доступа к папке Program Files . Вот почему сейчас много программного обеспечения перемещается в сторону каталога установки Roaming или Local folder. И поэтому не так давно с npm все работало нормально, а теперь вдруг получаем вот что:

$ npm i -g npm<strong i="11">@latest</strong>
C:\Program Files\nodejs\npx -> C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js
npm ERR! path C:\Program Files\nodejs\npm
npm ERR! code EPERM
npm ERR! errno -4048
npm ERR! syscall open
npm ERR! Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!  { [Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm']
npm ERR!   cause:
npm ERR!    { Error: EPERM: operation not permitted, open 'C:\Program Files\nodejs\npm'
npm ERR!      errno: -4048,
npm ERR!      code: 'EPERM',
npm ERR!      syscall: 'open',
npm ERR!      path: 'C:\\Program Files\\nodejs\\npm' },
npm ERR!   stack:
npm ERR!    'Error: EPERM: operation not permitted, open \'C:\\Program Files\\nodejs\\npm\'',
npm ERR!   errno: -4048,
npm ERR!   code: 'EPERM',
npm ERR!   syscall: 'open',
npm ERR!   path: 'C:\\Program Files\\nodejs\\npm' }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It's possible that the file was already in use (by a text editor or antivirus),
npm ERR! or that you lack permissions to access it.
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator (though this is not recommended).

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\fehTH4RTH\AppData\Roaming\npm-cache\_logs\2019-03-22T14_28_26_153Z-debug.log

О, я вижу. Я никогда не думал, что NPM будет установлен в PF, для меня это довольно странно. Я бы сказал, что именно те, кто это делает, являются причиной своих бед :)

@ Fr0sT-Brutal ну, для организации я тоже это делаю. Если у меня уже есть системная папка, предназначенная для приложений (Program Files), всякий раз, когда я что-то устанавливаю - я устанавливаю ее в папку «Program Files». Особенно, чтобы не засорять корневую папку диска случайными папками, такими как «nodejs» или «nvm», а также не попадать в длинные пути, например «c: / Users / My Name / Roaming / ApplicationData / something», я просто предпочитаю «c : / Program Files / что угодно ».
Тем не менее, хотя это бы действительно заставило меня работать таким образом (иметь nvm | node в месте вне программных файлов), тем не менее ... Я по крайней мере пробовал и установил его в c: / nvm (что касается node, я пробовал как c: / node, так и подпапку nvm: c: / nvm / node что-то вроде этого). Но проблема не устранена, npm по-прежнему не может быть обновлен с помощью npm i -g npm . Слава богу, потому что я бы не хотел жить с вещами, установленными вне папки Program Files. Конечно, я наконец сдался и все время использую одну версию узла, установленную с помощью установщика узлов по умолчанию для Windows с nodejs.org

@createdbyjurand недавно? IIRC, PF стал ограничен по записи для пользователя, начиная с XP.
@MrCroft Мне всегда было интересно, как люди могут жить со всем, что похоронено внутри PF ... Пробел в пути означает, что цитирование всегда требуется, безумие с x64-PF и x32-PF добавляет одну итерацию для поиска и - что самое неприятное - полностью плоская структура программного обеспечения. У меня> 100 приложений даже на домашнем ПК и еще 50 приложений на работе. Я бы выпрыгнул из окна, если бы мне пришлось искать приложения внутри PF.

Вы не должны помещать это в
C:/Users/My Name/Roaming/Whatever
вы можете использовать любой каталог, если он доступен для записи.

У меня есть все программы на D: Programs, ни одна из них не требует прав администратора, включая nodejs, python, cmake, JetBrains, go, OpenOffice и т. Д.

Затем я помещаю их все в переменные среды пути и реестр для current_user.
Работает как шарм.
Никаких дрянных инсталляторов черного ящика не требуется.

Если мне нужно что-то найти, я использую locate32, я даже не просматриваю папки / Рабочий стол / StartMenu.
Locate32 намного быстрее.
Или я запускаю их через CTRL + R, так как вы можете установить псевдонимы в реестре в HKCU.

Единственная причина иметь что-то в C:\ProgramFiles - это когда вы хотите установить определенное приложение для каждого пользователя на машине, что, как разработчик, в большинстве случаев вам не нужно, поскольку программы находятся в общесистемном пути / реестре. могут нарушить работу программ других пользователей или помешать им использовать версию, отличную от той, которую вы используете. Кроме того, это удобно на сервере - user1 может использовать свои nodejs, user2 - другой nodejs, и он не кусается.

Удаляя права администратора и сохраняя все в пользователе, вы гарантируете, что один пользователь не сможет нарушить программы и настройки другого пользователя. Также вы гарантируете, что ваши приложения запускаются без прав администратора, что иногда может пригодиться. И в худшем случае вы всегда можете удалить и очистить учетную запись пользователя, а затем заново ее восстановить.

Таким образом, я могу запустить около 1000 программ, не затрачивая ни минуты на установку.
Так работают даже JetBrains IDE и PostgreSQL.
Единственные программы, которые мне не удалось заставить работать так, это MS-Office, SQL-Server и Visual-Studio.
npm не следует добавлять в этот сомнительный список, а все потому, что его нельзя беспокоить перемещением нескольких существующих файлов вместо их перезаписи.

Во всяком случае, теперь у меня есть

Я просто переименовал эти файлы в "1"
npm1.cmd, npm1, npx1, npx1.cmd

и побежал:
" обновление npm1 -g "

Вроде нормально заработало, есть мысли?

возможно, это можно встроить в nvm - возможно, добавив флаг версии npm вместе с версией узла и флагом архитектуры при установке и функцией update-nvm

Я просто переименовал эти файлы в "1"
npm1.cmd, npm1, npx1, npx1.cmd

и побежал:
" обновление npm1 -g "

Вроде нормально заработало, есть мысли?

У меня тоже сработало, но пришлось удалить папку
nvmv10.15.3node_modulesnpmnode_modules.bin
потому что ошибка, указывающая на эту папку, все еще появлялась.

Спасибо!

Привет, ребята, я сделал пакет для обновления локальной версии Program Filesnodejs для npm
Проверять, выписываться
npm install -g npm-win-upgrade
npm-win-upgrade

Не уверен, что он вообще совместим с NVM, но он использует process.execPath для поиска папки node.exe, поэтому он должен работать.

@dolpsdw При запуске npm-win-upgrade появляется следующая ошибка:

Npm instaled as Global package: uninstalling...                                                                     
(node:10192) UnhandledPromiseRejectionWarning: Error: Command failed: npm uninstall npm -g                          
npm ERR! path C:\Program Files\nodejs\npx.cmd                                                                       
npm ERR! code EEXIST                                                                                                
npm ERR! Refusing to delete C:\Program Files\nodejs\npx.cmd: is outside C:\Program Files\nodejs\node_modules\npm and
 not a link                                                                                                         
npm ERR! File exists: C:\Program Files\nodejs\npx.cmd                                                               
npm ERR! Move it away, and try again.                                                                               

npm ERR! A complete log of this run can be found in:                                                                
npm ERR!     C:\Users\sjodle\AppData\Roaming\npm-cache\_logs\2019-04-23T17_42_11_305Z-debug.log                     

    at ChildProcess.exithandler (child_process.js:281:12)                                                           
    at emitTwo (events.js:126:13)                                                                                   
    at ChildProcess.emit (events.js:214:7)                                                                          
    at maybeClose (internal/child_process.js:915:16)                                                                
    at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)                                        
(node:10192) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing
 inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (
rejection id: 1)                                                                                                    
(node:10192) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejec
tions that are not handled will terminate the Node.js process with a non-zero exit code.                            

Привет @sodle ,

Первая ошибка (узел: 10192 Команда не удалась: npm uninstall npm -g): это происходит из-за того, что npm обнаружен как глобально установленный в папке% appdata% npm, но это может быть остаток и старый кеш узла. Это можно исправить с помощью npm list -g detection.

Что касается второй ошибки, для меня эта ошибка «Отказ от удаления» ... звучит как права администратора, которые не авторизованы в процессе. (Запрос UAC был отклонен?)

Попробуйте выполнить сценарий и примите масштабирование привилегий администратора, и если это не поможет, сообщите мне версию Origin для вашего узла, чтобы воспроизвести ошибку.

@dolpsdw Я почти уверен, что это часть одной и той же ошибки - npm отказывается удалить файл, потому что он неуместен или что-то в этом роде.

Во всяком случае, у меня больше нет машины, на которой произошла ошибка. Я дам вам знать, если столкнусь с такими же проблемами при его замене.

Привет @rsshilli
спасибо за предоставленный сценарий. Он работает достаточно хорошо и при желании обновляет npm до последней версии.
Единственная незначительная проблема, с которой я столкнулся, заключалась в том, что запуск npm list -g --depth=0 для вывода списка всех пакетов узлов привел к двум установкам npm.
Поэтому я просто добавил несколько строк кода, чтобы удалить переименованные файлы «...- старые» и переименованные папки «...- старые».
Выполнение npm list -g --depth=0 для вывода списка всех пакетов узлов привело к желаемой единственной установке npm.
Вот моя обновленная версия вашего скрипта:
cd %APPDATA%\nvm\v8.9.0 # or whatever version you're using
mv npm npm-old
mv npm.cmd npm-old.cmd
cd node_modules\
mv npm npm-old
cd npm-old\bin
node npm-cli.js install -g npm@latest

cd %APPDATA%\nvm\v8.9.0 # or whatever version you're using
rm npm-old
rm npm-old.cmd
cd node_modules\
rm -rf npm-old

Вот мой сценарий обновления npm на nvm:

https://stackoverflow.com/a/50955293/491553

Я только что сделал это при новой установке. Работает отлично.

@dolpsdw npm-win-upgrade завершился с теми же ошибками, что и npm install -g npm .
Есть еще один пакет npm-windows-upgrade , который тоже не работает, но не говорит почему (я полагаю, это то же самое).

@ Markus-Hanisch @rsshilli Спасибо за этот сценарий.

Взяв это за отправную точку, я хотел бы добавить следующий обобщенный сценарий PowerShell, который позволяет вам обновлять NPM независимо от вашей текущей версии узла и расположения nvm:

Push-Location (Join-Path (Split-Path (Get-Command nvm).Path) (node --version))
  Move-Item npm npm-old
  Move-Item npm.cmd npm-old.cmd
  Move-Item npx.cmd npx-old.cmd
  Push-Location .\node_modules
    Move-Item npm npm-old
    Push-Location .\npm-old\bin
      node npm-cli.js install -g npm<strong i="8">@latest</strong>
    Pop-Location
    Remove-Item npm-old -Recurse
  Pop-Location
  Remove-Item npx-old.cmd
  Remove-Item npm-old.cmd
  Remove-Item npm-old -Recurse
Pop-Location

(единственное предположение состоит в том, что nvm хранит свои версии вместе со своим exe-файлом и называет их в соответствии с выводом node --version )

Прочтите эту ветку; В конце концов, мне больше всего повезло с удалением и переустановкой node.js с помощью программ добавления / удаления.

Проблема была решена для меня, как и год назад, путем включения Mac;)

@kuncevic

Проблема была решена для меня, как и год назад, путем включения Mac;)

Исправлено:
Как и год назад я избегал проблемы, включив Mac;)
: rofl:

@kuncevic , @ Fr0sT-Brutal:
И отказавшись от свободы выбора, когда дело доходит до оборудования.
Вовсе не лучший компромисс.
Кроме того, вы отказываетесь от контроля над программным обеспечением, работающим на вашем компьютере.
Если вам нужно где-то переключиться, переключитесь на Linux - это гораздо лучший выбор, в любом случае для серверных вещей.

https://blog.npmjs.org/post/189618601100/binary-planting-with-the-npm-cli

Я сбросил nvm для windows. Через 2 года он все еще не работает должным образом даже с последней версией узла

Ребята, это проблема npm, а не NVM4W. Для этого существует служебная программа, доступная по адресу https://github.com/felixrieseberg/npm-windows-upgrade.

Я просто переименовал эти файлы в "1"
npm1.cmd, npm1, npx1, npx1.cmd

и побежал:
" обновление npm1 -g "

Просто переименуйте файл в npm1.cmd , хватит. Затем запустите обновление npm .

Нет необходимости использовать npm-windows-upgrade .

@coreybutler Я не совсем уверен в этом. npm-windows-upgrade у меня не работал. Затем, после того, как я вручную очистил сценарии верхнего уровня (те же самые, которые здесь переименовывают другие, а также npx), node (Join-Path $env:NVM_SYMLINK 'node_modules\npm\lib\npm.js') install -g npm изначально работал, а npm install -g npm работал для более позднего обновления без ручного вмешательства . Похоже, что первоначальная установка npm как-то нарушена.

Даже если это так или иначе является ошибкой npm в том, что установщик не работает или что-то в этом роде, а не nvm, один шаг, который nvm может предпринять для решения проблемы, - это очистить эти сценарии и немедленно вызвать обновление при создании среды начальной версии. Или, по крайней мере, он мог бы предоставить для этого возможность или команду.

@kuncevic Предложение по улучшению ваших инструкций:

Вместо того, чтобы копировать файлы туда и обратно или пытаться перемещать их достаточно быстро во время выполнения процесса, просто вызовите сценарий npm непосредственно с помощью команды узла.

PowerShell:

node (Join-Path $env:NVM_SYMLINK 'node_modules\npm\lib\npm.js') install -g npm

Командная строка:

node "%NVM_SYMLINK%\node_modules\npm\lib\npm.js" install -g npm

Затем вы можете просто удалить файлы один раз и перезапустить процесс, не возвращая их, если это необходимо.

@ bladeoflight16 Я пытался, но получил эту ошибку.

C:\Users\woonk>node %NVM_SYMLINK%\node_modules\npm\lib\npm.js install -g npm
internal/modules/cjs/loader.js:796
    throw err;
    ^

Error: Cannot find module 'C:\Program'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:793:17)
    at Function.Module._load (internal/modules/cjs/loader.js:686:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1043:10)
    at internal/main/run_main_module.js:17:11 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

@ mattdamon108 Извините. Вам нужно указать путь в cmd, если в нем есть пробелы. Я обновил пост. Благодарю.

Получал эту ошибку в Windows и хотел вернуться к более старому npm для проекта, и очень мягко я просто перешел к уже сформированному местоположению символической ссылки команды npm и переименовал папку npm в node_modules на свое собственное имя версии, а затем загрузил нужная мне версия, создал папку с именем npm и сбросил туда загруженное содержимое, которое сработало!

@coreybutler ваше предложение о создании символической ссылки не сработало, так как окна жаловались, что символическая ссылка уже существует. Также в Windows сложно быстро редактировать символическую ссылку. Также мне нужно было регулярно переключаться между двумя версиями npm. Поэтому я и сделал это.

Я просто переименовал эти файлы в "1"
npm1.cmd, npm1, npx1, npx1.cmd
и побежал:
" обновление npm1 -g "

Просто переименуйте файл в npm1.cmd , хватит. Затем запустите обновление npm .

Нет необходимости использовать npm-windows-upgrade .

@xmedeko @chidveer Может быть, мне что-то здесь не хватает, но разве npx npm-windows-upgrade проще, чем переименование файлов вручную перед запуском npm update ?

@jakobrosenberg npm-windows-upgrade у меня не работает. Может быть, я сделал что-то не так, может я попытался обновить или что-то еще. ИМО переименовать один файл проще, чем изучать, почему npm-windows-upgrade не работает и как это исправить.

Примечание: рекомендуется использовать npm-windows-upgrade глобально, поэтому вы запускаете его как npm-windows-upgrade , а не npx npm-windows-upgrade .

@xmedeko не будет npx npm-windows-upgrade глобально, если вы не находитесь внутри проекта узла с локальной установкой npm-windows-upgrade ?

@jakobrosenberg Да, вы правы, я не знал, что npx ведет себя так, я всегда использую его только для локальных пакетов проектов.

Пакетный скрипт, который отлично работает.
https://gist.github.com/nokidding/aafaf90adc80cbce54b676340817bb13

работает как шарм
просто убедитесь, что 'set node_path =! PROGRAMFILES! nodejs' указывает правильный путь в вашем случае
особенно в случае отсутствия стандартной установки (извлечение zip)

Та же проблема!
как я это решил:

  1. Панель управления => Удалить программу
  2. Удалить приложение NodeJS
  3. Удалить всю папку NodeJS в файлах программы
  4. Свежая установка Node JS

Мне просто нужен был шаг 4, т.е. просто скачайте и заново установите Node JS.
Тогда это сработало.

Переустановка версии узла работает нормально, но поскольку это проблема, связанная с nvm , почему бы не использовать силу nvm для решения проблемы? Для меня, вместо того, чтобы добавлять / удалять программы, было намного быстрее / проще сохранить все это в командной строке. Например:

nvm uninstall VERSION
nvm install VERSION

После этого закройте и снова откройте оболочку. Быстро и легко (теперь, по крайней мере, вы знаете). 😄

Если у вас есть какие-либо проблемы (например, nvm указывает, что версия уже установлена), проверьте, существует ли папка, связанная с этой версией (например, %NVM_HOME%\VERSION ), и что файл node.exe все еще нет. Если он все еще там, убедитесь, что у вас еще нет приложений, потенциально запускающих node (например, в моем случае моя IDE запускала его, поэтому я закрыл его и смог полностью удалить).

РЕДАКТИРОВАТЬ: ⚠️ Я полагаю, что это простое решение имеет один важный побочный эффект: оно удалит ваши глобально установленные пакеты ... хм ... может быть проще вручную переустановить их. Имейте в виду! ⚠️

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

eliavmaman picture eliavmaman  ·  6Комментарии

AllainPL picture AllainPL  ·  7Комментарии

hsali picture hsali  ·  4Комментарии

thany picture thany  ·  4Комментарии

keylowgee picture keylowgee  ·  6Комментарии