Nvm-windows: Precisa remover manualmente a pasta na desinstalação do nvm

Criado em 11 mar. 2017  ·  13Comentários  ·  Fonte: coreybutler/nvm-windows

Oi,
aqui estão as etapas para reproduzir (incluindo a descrição do erro). Isso acontece no sistema x64,

nvm install xyz (6.10.0 ou semelhante, mas a versão não importa)
nvm uninstall xyz
=> desinstalação bem-sucedida, sem sobras

nvm install xyz
nvm usar xyz
nvm use uvw (outra versão - apenas para ter certeza de que xyz não é usado - esta etapa provavelmente não é necessária)
nvm uninstall xyz
=> precisa remover a pasta xyz manualmente do caminho nvm, que sempre contém node.exe sozinho

IMO, isso acontece porque antes do "uso" existe um node64.exe, que é renomeado em "usar" para o node.exe. Este node.exe permanece a partir deste ponto e obviamente bloqueia a remoção da pasta.

Espero que a descrição seja clara o suficiente.
Obrigado

bug

Comentários muito úteis

precisa reabrir devido ao mesmo problema no macOS

Todos 13 comentários

Se você executar nvm ls depois disso, ele mostra a versão desinstalada?

Sim, de fato - após instalar / usar / desinstalar, nvm ls ainda mostra o
versão desinstalada.

BTW, se eu renomear node.exe para node64.exe antes da desinstalação, o
versão é removida completamente (sem ter que remover manualmente o
pasta).

OK, marquei isso como um bug. Qual versão do Windows você está executando?

Qual versão do Windows você está executando?

Windows 10 (atualização de aniversário) x64

Oi,

afaict (mas não sou um desenvolvedor Go) em arch.go: SearchBytesInFile o
o arquivo aberto nunca é fechado. Então, quando os.RemoveAll tenta excluir o
arquivos há uma violação de compartilhamento.

Estou um pouco surpreso, porém, que isso não tenha sido relatado antes,
porque eu acho que o bug deveria ocorrer toda vez que uma versão "usada"
(que contém node.exe) deve ser desinstalado.

Depois que o executável conclui uma operação, ele não está mais associado a nenhum arquivo. Em outras palavras, o executável executa uma operação e, em seguida, fecha todas as conexões de arquivo ao sair. Contudo; Eu não tive a chance de testar isso pessoalmente na versão mais recente do Windows. Se o Windows agora está usando um bloqueio de arquivo para esta operação, então você pode estar certo ... isso pode ser demorado.

Vou tentar depurar isso assim que puder, mas estou em um contrato de trabalho esta semana e tenho obrigações SXSWi. Então, pode demorar um pouco antes que eu possa realmente sentar com isso.

Depois que o executável conclui uma operação, ele não está mais associado a nenhum arquivo. Em outras palavras, o executável executa uma operação e, em seguida, fecha todas as conexões de arquivo ao sair.

IMO: nvm.exe abre node.exe (e apenas isso, não node64.exe ou similar)
e verifica alguns bytes, mas não fecha o identificador de arquivo.
Em seguida, nvm.exe tenta remover a pasta (mas é claro que não saiu
no meio, para que o identificador de arquivo ainda esteja aberto).

Contudo; Eu não tive a chance de testar isso pessoalmente na versão mais recente do Windows. Se o Windows agora está usando um bloqueio de arquivo para esta operação, então você pode estar certo ... isso pode ser demorado.

Não é realmente um bloqueio de arquivo. Eu deixei nvm.exe mostrar o erro e
lê "O processo não pode acessar o arquivo porque ele está sendo usado por
outro processo "(que é a mesma mensagem se estiver no mesmo
processar).

Vou tentar depurar isso assim que puder, mas estou em um contrato de trabalho esta semana e tenho obrigações SXSWi. Então, pode demorar um pouco antes que eu possa realmente sentar com isso.

Ok sem problemas. Se você pudesse consertar na próxima versão.

Obrigado!

Fiz alguns testes e isso só ocorre se você nvm usar xxx a versão a ser removida E estiver usando arch 64. Como já foi mencionado, o node64.exe é renomeado para node.exe e não removido. No entanto, se você usar outra versão e renomear manualmente node.exe para node64.exe (como ujaroe menciona), a desinstalação será concluída com êxito.

Isso significa que há algumas maneiras de corrigir o problema. Eu recomendaria 'nvm use' restaurando a pasta de versão do comando use está movendo de volta para o estado original. A outra é desinstalar, verificar o arco e certificar-se de que o executável do nó corresponde ao arco da versão. Existem algumas outras coisas que podem ser feitas com links simbólicos, mas acho que essas são as duas melhores opções. Minha habilidade de Go é muito baixa, mas vou tentar construir um ou ambos em breve.

editar: ortografia

O mesmo problema aqui. Saída CLI:

❯ nvm list

  * 8.4.0 (Currently using 64-bit executable)
    6.11.2
    6.10.0

❯ nvm uninstall 6.10.0
Uninstalling node v6.10.0...Error removing node v6.10.0
Manually remove C:\Users\darsain\AppData\Roaming\nvm\v6.10.0.

❯ nvm list

  * 8.4.0 (Currently using 64-bit executable)
    6.11.2
    6.10.0

Depois de executar o comando uninstall , a pasta v6.10.0 tinha apenas node.exe arquivo nela. Tenho 99% de certeza de que nada o estava usando. A exclusão manual funcionou bem.

Mas, a versão v6.10.0 foi instalada um tempo atrás no nvm 1.1.1 eu acho. Hoje eu atualizei para 1.1.6. A instalação e remoção do nó 6.11.2 que fiz hoje após a atualização funcionou bem.

Eu posso confirmar este. Também aconteceu comigo no Win10 x64 usando node v6.9.1 e nvm 1.1.3

Também aconteceu no Win10 x64 (versão 1709) usando o nó v8.11.1 e nvm 1.1.6

Olá, @coreybutler , o bug também aconteceu no Windows10 x64, e se eu usar o comando nvm use x.y.z para trocar a versão do nodejs, o xyz não será desinstalado, enquanto a versão do abc se eu não puder usar nvm use comando

precisa reabrir devido ao mesmo problema no macOS

Esta página foi útil?
0 / 5 - 0 avaliações