Nvm-windows: mklink n'est pas fiable sur windows 10

Créé le 4 mai 2017  ·  3Commentaires  ·  Source: coreybutler/nvm-windows

Mon environnement

  • [ ] Windows 7 ou inférieur (pas vraiment pris en charge en raison de la fin de vie - voir le wiki pour plus de détails)
  • [ ] Windows 8
  • [ ] Windows 8.1
  • [X] Windows 10
  • [ ] Windows 10 IoT Core
  • [ ] Serveur Windows 2012
  • [ ] Windows Server 2012 R2
  • [ ] Serveur Windows 2016

  • [ ] Mon installation Windows n'est pas en anglais.

J'ai déjà...

  • [X] lisez le README pour être au courant des problèmes de npm et d'antivirus.
  • [X] a examiné le wiki pour s'assurer que mon problème n'a pas déjà été résolu.
  • [X] vérifié J'utilise un compte avec des privilèges administratifs.
  • [X] a recherché les problèmes (ouverts et fermés) pour s'assurer qu'il ne s'agit pas d'un doublon.
  • [X] s'est assuré qu'il ne s'agissait pas d'une question sur l'utilisation de NVM pour Windows, car

Mon problème est lié à (cochez uniquement ceux qui s'appliquent) :

  • [ ] paramètres.txt
  • [ ] prise en charge des proxys
  • [ ] Prise en charge 32 ou 64 bits

Comportement prévisible

nvm use <version> doit créer un lien symbolique dans C:\Program Files\nodejs ou à la valeur fournie dans l'argument de chemin dans le fichier settings.txt

Comportement réel

Le lien symbolique n'est pas toujours créé, même si j'exécute nvm use à partir d'un shell élevé.

Étapes pour reproduire le problème :

nvm install 6.9.1
nvm use 6.9.1

Je suis invité par le script elevate.cmd, je réponds oui, le lien symbolique n'est pas créé

Je ne sais pas si c'est lié mais je lance nvm use depuis powershell.
De plus, c'est un peu aléatoire, sur certaines fenêtres 10, j'ai le problème, sur d'autres non.
Je pense qu'une bonne solution de contournement serait de tester si le lien symbolique est créé après avoir exécuté cmd.exe mklink. Si le lien symbolique n'est pas présent, exécutez la commande powershell new-item pour créer le lien

Tous les 3 commentaires

Ne voyez-vous pas réellement le lien symbolique après avoir exécuté nvm use ? Avez-vous essayé d'exécuter la commande dans un shell standard au lieu de Powershell ?

1.Veuillez supprimer le nœud d'installation par le programme de désinstallation de windows10

2.nvm installer

3. fenêtre de modification des variables d'environnement ( référence )

Interprétation chinoise :
1. Pour installer nvm sur windows10, supprimez d'abord le nœud qui a été installé sur l'ordinateur lui-même, car nvm ne peut pas gérer le nvm installé sur windows10 (échec signalé pour modifier le registre)
2. Après avoir installé nvm, utilisez nvm lui-même pour installer le nœud
3. Modifiez NODE_PATH en C:\Program Files\nodejs ; car nvm crée une connexion logicielle dans "C:\Program Files\nodejs" et se connecte à "nvm root" (nvm root pointe vers le répertoire réel du nœud)

@coreybutler : Non, je ne vois pas le lien symbolique après avoir exécuté nvm use.

Avez-vous essayé d'exécuter la commande dans un shell standard au lieu de Powershell ?

=> Le tout est de l'exécuter à partir de powershell. En effet je lance un script qui installe plein de dépendances et configure la VM. Voici un sous-ensemble du 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
#}

Vous devriez pouvoir mettre ce script dans un fichier ps1 et l'exécuter tel quel. J'ai commenté les fonctions Add-Env et Add-Path qui ajoutent respectivement des variables à l'env et l'emplacement du dossier au PATH. J'ai également commenté l'appel de script de désinstallation qui désinstalle essentiellement nvm s'il en a été installé auparavant. J'ai également commenté la solution de contournement que j'ai trouvée : créez le lien symbolique manuellement.

@youzaiyouzai666 : Je

Cette page vous a été utile?
0 / 5 - 0 notes