Nvm-windows: mklink não é confiável no Windows 10

Criado em 4 mai. 2017  ·  3Comentários  ·  Fonte: coreybutler/nvm-windows

Meu ambiente

  • [] Windows 7 ou inferior (sem suporte devido ao EOL - consulte o wiki para obter detalhes)
  • [] Windows 8
  • [] Windows 8.1
  • [X] Windows 10
  • [] Windows 10 IoT Core
  • [] Windows Server 2012
  • [] Windows Server 2012 R2
  • [] Windows Server 2016

  • [] Minha instalação do Windows não está em inglês.

Eu já...

  • [X] leia o README para estar ciente dos problemas do npm e antivírus.
  • [X] revisou o wiki para ter certeza de que meu problema ainda não foi resolvido.
  • [X] verificou que estou usando uma conta com privilégios administrativos.
  • [X] pesquisou os problemas (abertos e fechados) para se certificar de que não era uma duplicata.
  • [X] certificou-se de que esta não é uma pergunta sobre como usar o NVM para Windows, já que o gitter é usado para perguntas e comentários.

Meu problema está relacionado a (marque apenas os que se aplicam):

  • [] settings.txt
  • [] suporte de proxy
  • [] Suporte de 32 ou 64 bits

Comportamento esperado

nvm use <version> deve criar um link simbólico em C: \ Arquivos de programas \ nodejs ou no valor fornecido no argumento de caminho no arquivo settings.txt

Comportamento Real

O link simbólico nem sempre é criado, mesmo se eu executar nvm use a partir de um shell elevado.

Etapas para reproduzir o problema:

nvm install 6.9.1
nvm use 6.9.1

Sou solicitado pelo script elevate.cmd, respondo que sim, o link simbólico não foi criado

Não sei se está relacionado, mas corro nvm use do PowerShell.
Além disso, é meio aleatório, em algumas janelas 10 eu tenho o problema, em outras não.
Acredito que uma boa solução alternativa seria testar se o link simbólico é criado após a execução de cmd.exe mklink. Se o link simbólico não estiver presente, execute o comando powerhell new-item para criar o link

Todos 3 comentários

Você realmente não vê o link simbólico após executar nvm use ? Você já tentou executar o comando em um shell padrão em vez do Powershell?

1. Exclua o nó de instalação pelo programa de desinstalação do window10

2.nvm install

3. janela de variáveis ​​de ambiente de modificação ( referência )

Interpretação chinesa:
1. Para instalar o nvm no window10, primeiro exclua o nó que foi instalado no próprio computador, porque o nvm não pode gerenciar o nvm instalado no window10 (falha relatada para modificar o registro)
2. Depois de instalar o nvm, use o próprio nvm para instalar o nó
3. Modifique NODE_PATH para C: \ Arquivos de programas \ nodejs; porque nvm cria uma conexão suave em "C: \ Arquivos de programas \ nodejs" e se conecta a "raiz nvm" (a raiz nvm aponta para o diretório real do nó)

@coreybutler : Não, não vejo o link simbólico após executar o nvm use.

Você já tentou executar o comando em um shell padrão em vez do Powershell?

=> O objetivo é executá-lo a partir do PowerShell. Na verdade, eu executo um script que instala muitas dependências e configuro a VM. Aqui está um subconjunto do script

$wc = New-Object System.Net.WebClient

# configure repositories
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

Get-Packageprovider -Name chocolatey
Set-PackageSource -Name Chocolatey -Trusted

Install-Package 7zip.install -ProviderName Chocolatey -RequiredVersion 16.02.0.20160811
$env:PATH+=";C:\Program Files\7-Zip"

$source = "https://github.com/coreybutler/nvm-windows/releases/download/1.1.3/nvm-setup.zip"
$archive = Join-Path $env:TEMP ($source.substring($source.lastindexOf('/') + 1))

$wc.DownloadFile($source, $archive)

echo "downloaded at: $archive"

7z x -aoa -y $archive "-o$env:TEMP"

#$uninstallScript = (Join-Path $PSScriptRoot uninstall_cmdline.ps1)
#&$uninstallScript -software "NVM for Windows*" | Out-Null

$nvmSetup = Join-Path $env:TEMP "nvm-setup.exe"
Start-Process $nvmSetup -ArgumentList @("/SILENT", "/SP-", "/SUPPRESSMSGBOXES") -Wait
ri $archive
ri $nvmSetup

$localNvmPath = Join-Path $env:APPDATA "nvm"
$defaultNodejsPath = "C:\Program Files\nodejs"
#Add-Path $localNvmPath
#Add-Env NVM_HOME $localNvmPath
ri $defaultNodejsPath -ErrorAction SilentlyContinue -Recurse -Force
nvm root $env:NVM_HOME
nvm install 4.5.0
nvm use 4.5.0
#create manually symlink if problem with nvm use, see https://github.com/coreybutler/nvm-windows/issues/266
#$nodePath = Join-Path $localNvmPath "v4.5.0"
#if ((-Not (Test-Path $nodePath) -or (-Not (Test-Path $defaultNodejsPath))))
#{
#    Start-Process powershell -Verb runAs -ArgumentList "-WindowStyle Hidden", "-Command `"&{ New-Item -Path `'$defaultNodejsPath`' -Value `'$nodePath`' -ItemType SymbolicLink }`"" -Wait -WindowStyle Hidden
#}

Você deve ser capaz de colocar este script em um arquivo ps1 e executá-lo como está. Comentei as funções Add-Env e Add-Path que, respectivamente, adicionam variáveis ​​ao env e a localização da pasta ao PATH. Eu também comentei a chamada do script de desinstalação que basicamente desinstala o nvm se algum foi instalado antes. Também comentei a solução alternativa que encontrei: criar o link simbólico manualmente.

@ youzaiyouzai666 : Eu

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