zoukankan      html  css  js  c++  java
  • 安装了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

    3、上述方法试过还是出错,则将2017下相关目录考至2019目录下。方法可以用 cnpm查看具体哪个目录出错。

    4、gyp 在 用户目录有 .gyp目录 也有可能报错,删除即可。

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

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

  • 相关阅读:
    Git 生成 && 配置SSH key,配置多个SSH key
    Java异常处理机制:try...catch...的执行流程
    安防相机中的WDR技术
    静态库和动态库的编译链接和使用
    堆栈溢出检测机制
    使用vscode发布
    栈空间分配和栈对齐访问
    linux 查找文件夹下所有指定文件并重命名
    gdb使用小技巧-保存调试点现场
    mount共享文件夹出错,提示操作正在进行
  • 原文地址:https://www.cnblogs.com/ldsweely/p/15047389.html
Copyright © 2011-2022 走看看