Search code examples
powershellnode-sass

Powershell: Setting SASS_BINARY_PATH


I need to set SASS_BINARY_PATH environment variable with the local file I've downloaded to be able to install node-sass behind a corporate firewall. So on windows cmd, I just do:

SET SASS_BINARY_PATH=C:\Source\Repos\SRT\Srt.Web\sass-binary\v4.7.2\win32-x64-48_binding.node

And the installation works fine since it successfully sets the variable. But when I try doing it via Powershell, it doesn't work:

$env:SASS_BINARY_PATH="C:\Source\Repos\SRT\Srt.Web\sass-binary\v4.7.2\win32-x64-48_binding.node"

I've also tried another way on Powershell:

[Environment]::SetEnvironmentVariable("SASS_BINARY_PATH", "C:\Source\Repos\SRT\Srt.Web\sass-binary\v4.7.2\win32-x64-48_binding.node", "Machine")

Upon checking it on the control panel, it successfully added a "SASS_BINARY_PATH" system variable. But upon trying to reinstall node-sass, it fails again.

One of my observations is when I'm doing it the windows cmd way then check it by using the command line set, the variable shows up along with others. But when I use both the Powershell methods, it does not show up. Any ideas on this?

The error encountered when trying to npm-install node-sass over a corporate firewall is:

Downloading binary from https://github.com/sass/node-sass/releases/download/v4.7 .2/win32-x64-48_binding.node Cannot download "https://github.com/sass/node-sass/releases/download/v4.7.2/win3 2-x64-48_binding.node":

HTTP error 401 Unauthorized


Solution

    • Download win32-x64-48_binding.node manually
    • Put it in C:\Users\<user>\AppData\Roaming\npm-cache\node-sass\4.7.2 folder.
    • Then try to run npm install node-sass

    here is the PowerShell command @jengfad used based on above solution which is commented in the discussion

    $cacheSassPath = $env:APPDATA + '\npm-cache\node-sass' 
    
    if( -Not (Test-Path -Path $cacheSassPath ) ) 
    { 
    
    Write-Host "cacheSassPath not exists" 
    
    New-Item -ItemType directory -Path $cacheSassPath 
    Write-Host "cacheSassPath CREATED" 
    } 
    
    <# Ensure has no content #> 
    Get-ChildItem -Path $cacheSassPath -Recurse| Foreach-object {Remove-item -Recurse -path $_.FullName } 
    
    <# Copy local sass binary (~Srt.Web\sass-binary\4.7.2) file to cache folder #> 
    $sassBinaryPath = split-path -parent $MyInvocation.MyCommand.Definition 
    $sassBinaryPath = $sassBinaryPath + "\sass-binary\4.7.2" 
    
    Copy-Item -Path $sassBinaryPath -Recurse -Destination $npmcachedir -Container 
    
    Write-Host "node-sass binary file successfully copied!"