安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法

Posted wolbo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法相关的知识,希望对你有一定的参考价值。

1 新建powershell脚本文件

<#
This is a workaround for "node-gyp is unable to find msbuild if VS2019 is installed"
  https://github.com/nodejs/node-gyp/issues/1663
It create a shim EXE as "MSBuild15.0BinMSBuild.exe" to target "MSBuildCurrentBinMSBuild.exe"
By noseratio - MIT license - use at your own risk!
It requires admin mode, I use wsudo/wsudox (https://chocolatey.org/packages/wsudo) for that:
  wsudo powershell -f make-msbuild-shim.ps1 
#>

#Requires -RunAsAdministrator 
#Requires -Version 5.1
$ErrorActionPreference = "Stop"

$vsBasePath = . "${env:ProgramFiles(x86)}Microsoft Visual StudioInstallervswhere.exe" `
  -latest `
  -requires Microsoft.Component.MSBuild `
  -property installationPath -format value

if (!$vsBasePath) { 
  throw "VS2017+ must be installed" 
}

$msbuildSimPath = [System.IO.Path]::Combine($vsBasePath, "MSBuild15.0BinMSBuild.exe")
if ([System.IO.File]::Exists($msbuildSimPath)) {
  Write-Host "Already exists: $msbuildSimPath"
  exit 0;
}

# Create the shim .EXE using C#
$code = @"
  using System;
  using System.Diagnostics;
  using System.IO;
  using System.Linq;
  static class MSBuildShim
  {
    static void Main()
    {
      var thisExe = Process.GetCurrentProcess().MainModule.FileName;
      var thisExeDir = Path.GetDirectoryName(thisExe);
      var newExe = Path.GetFullPath(Path.Combine(thisExeDir, "..\..\Current\Bin", "MSBuild.exe"));
      if (!File.Exists(newExe))
        throw new FileNotFoundException(newExe);
      var process = new Process();
      process.StartInfo.FileName = newExe;
      process.StartInfo.Arguments = String.Join("u0020", Environment.GetCommandLineArgs().Skip(1));
      process.StartInfo.UseShellExecute = false;
      if (!process.Start())
        throw new InvalidOperationException(newExe);
      process.WaitForExit();
      Environment.ExitCode = process.ExitCode;
    }
  }
"@

Add-Type -TypeDefinition $code `
  -OutputType ConsoleApplication `
  -OutputAssembly "$msbuildSimPath" `
  -ReferencedAssemblies "System.Core.dll"

Write-Host "Shim created at: $msbuildSimPath"

2 打开powershell 执行脚本 生成垫片程序

如果提示禁止执行脚本 则执行 set-executionpolicy remotesigned

 

附:npm install --global --production windows-build-tools  这个不太好使且只支持2015 2017

 

参考 :1 http://continuousdeveloper.com/2019/04/09/node-gyp-with-visual-studio-2019/

    2 https://blog.csdn.net/ebzxw/article/details/85019887

以上是关于安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Cannot download “https://github.com/sass/node-sass/releases/download/binding.nod

Cannot download “https://github.com/sass/node-sass/releases/download/binding.nod

解决npm安装node-sass太慢及编译错误问题

安装node-sass正确姿势

win10下使用msys+vs2019编译ffmpeg源码

win10下使用msys+vs2019编译ffmpeg源码