Nvm-windows: mklink no es confiable en Windows 10

Creado en 4 may. 2017  ·  3Comentarios  ·  Fuente: coreybutler/nvm-windows

Mi entorno

  • [] Windows 7 o inferior (no es realmente compatible debido a EOL; consulte la wiki para obtener más detalles)
  • [] Windows 8
  • [] Windows 8.1
  • [X] Windows 10
  • [] Windows 10 IoT Core
  • [] Windows Server 2012
  • [] Windows Server 2012 R2
  • [] Windows Server 2016

  • [] Mi instalación de Windows no está en inglés.

Ya tengo...

  • [X] lea el archivo README para estar al tanto de errores de npm y problemas de antivirus.
  • [X] revisó la wiki para asegurarse de que mi problema aún no se haya resuelto.
  • [X] verificado Estoy usando una cuenta con privilegios administrativos.
  • [X] buscó los problemas (abiertos y cerrados) para asegurarse de que no sea un duplicado.
  • [X] se aseguró de que esta no sea una pregunta sobre cómo usar NVM para Windows, ya que gitter se usa para preguntas y comentarios.

Mi problema está relacionado con (marque solo los que correspondan):

  • [] settings.txt
  • [] soporte de proxy
  • [] Soporte de 32 o 64 bits

Comportamiento esperado

nvm use <version> debe crear un enlace simbólico en C: \ Archivos de programa \ nodejs o en el valor proporcionado en el argumento de ruta en el archivo settings.txt

Comportamiento real

El enlace simbólico no siempre se crea, incluso si ejecuto nvm use desde un shell elevado.

Pasos para reproducir el problema:

nvm install 6.9.1
nvm use 6.9.1

Me solicita el script elevate.cmd, respondo que sí, el enlace simbólico no se crea

No sé si está relacionado, pero ejecuto nvm use desde powershell.
También es un poco aleatorio, en algunas ventanas 10 tengo el problema, en otras no.
Creo que una buena solución sería probar si el enlace simbólico se crea después de ejecutar cmd.exe mklink. Si el enlace simbólico no está presente, ejecute el comando de powershell new-item para crear el enlace

Todos 3 comentarios

¿No ve realmente el enlace simbólico después de ejecutar nvm use ? ¿Ha intentado ejecutar el comando en un shell estándar en lugar de Powershell?

1.Por favor, elimine el nodo de instalación mediante el programa de desinstalación de window10

2.nvm instalar

3.ventana Variables de entorno de modificación ( referencia )

Interpretación china:
1. Para instalar nvm en window10, primero elimine el nodo que se ha instalado en la propia computadora, porque nvm no puede administrar el nvm instalado en window10 (se informó que no se pudo modificar el registro)
2. Después de instalar nvm, use nvm para instalar el nodo
3. Modifique NODE_PATH a C: \ Archivos de programa \ nodejs; porque nvm crea una conexión suave en "C: \ Archivos de programa \ nodejs" y se conecta a "nvm root" (la raíz de nvm apunta al directorio real del nodo)

@coreybutler : No, no veo el enlace simbólico después de ejecutar nvm use.

¿Ha intentado ejecutar el comando en un shell estándar en lugar de Powershell?

=> El objetivo es ejecutarlo desde powershell. De hecho, ejecuto un script que instala muchas dependencias y configuro la máquina virtual. Aquí hay un subconjunto del 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
#}

Debería poder poner este script en un archivo ps1 y ejecutarlo como está. Comenté las funciones Add-Env y Add-Path que, respectivamente, agregan variables al entorno y la ubicación de la carpeta al PATH. También comenté la llamada de script de desinstalación que básicamente desinstala nvm si se instaló antes. También comenté la solución que encontré: crear el enlace simbólico manualmente.

@ youzaiyouzai666 : Engendro una nueva máquina virtual en Windows 10 Enterprise 64bits, no hay un nodo anterior instalado.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

eliavmaman picture eliavmaman  ·  6Comentarios

AllainPL picture AllainPL  ·  7Comentarios

waiholiu picture waiholiu  ·  7Comentarios

snerte picture snerte  ·  5Comentarios

thany picture thany  ·  4Comentarios