pwsh-conf/Modules/posh-nodejs/posh-nodejs.psm1

60 lines
1.7 KiB
PowerShell
Raw Normal View History

2022-08-16 06:43:25 +00:00
if (Get-Module posh-nodejs) { return }
$NodeJsHome = "$HOME\Apps\nodejs"
$InitialNodePath = $env:Path.Split(";") | Where-Object { $_ -like "$NodeJsHome*" }
function CompleteNodeJsVersion {
param($commandName, $parameterName, $wordToComplete,
$commandAst, $fakeBoundParameters)
Get-ChildItem -Directory $NodeJsHome
| ForEach-Object { $_.Name.Split("-")[1].Substring(1) }
| Where-Object { $_ -Like "$wordToComplete*" }
| Sort-Object
}
function nvm {
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)]
[ValidateSet("list", "activate", "deactivate")]
$command,
[Parameter(Mandatory = $false)]
[ArgumentCompleter({ CompleteNodeJsVersion @args })]
$version)
switch ($command) {
"list" {
Get-ChildItem -Directory $NodeJsHome
| ForEach-Object {
$version = $_.Name.Split("-")[1].Substring(1)
Write-Output "$version"
}
}
"activate" {
$path = "$NodeJsHome\node-v$version-win-x64"
if (Test-Path "$path") {
$paths = $env:Path.Split(";") | Where-Object { $_ -NotLike "$NodeJsHome*" }
$paths += $path
$env:Path = $paths | Join-String -Separator ";"
}
else {
Write-Error "NodeJS version '${version}' not found."
}
}
"deactivate" {
$paths = $env:Path.Split(";") | Where-Object { $_ -NotLike "$NodeJsHome*" }
$paths += $InitialNodePath
$env:Path = $paths | Join-String -Separator ";"
}
default {
Write-Error "Unknown nvm command ${args[0]}."
}
}
}