Powershell psake调用msys_版本的npm安装
我需要确保安装了一些NPM依赖项,其中一些依赖项使用node_gyp进行编译。这意味着我必须调用“npm安装--msvs_version=2013”,以便node_gyp将使用我的vs.net 2013编译器。但由于某些原因,将此添加到psake任务失败。看起来它没有正确地传递第三个参数Powershell psake调用msys_版本的npm安装,powershell,npm,psake,Powershell,Npm,Psake,我需要确保安装了一些NPM依赖项,其中一些依赖项使用node_gyp进行编译。这意味着我必须调用“npm安装--msvs_version=2013”,以便node_gyp将使用我的vs.net 2013编译器。但由于某些原因,将此添加到psake任务失败。看起来它没有正确地传递第三个参数 task npmInstall { exec {npm install --msvs_version=2013} } 调用“/psake npmInstall”会导致它运行,但node_gyp失败,因为它
task npmInstall {
exec {npm install --msvs_version=2013}
}
调用“/psake npmInstall”会导致它运行,但node_gyp失败,因为它没有获得第三个参数。错误似乎很明显——它没有使用2013 CPP文件。如果是V110,应该是V120(通常通过调用--msvs_version2013来解决):
C:\Projects\MyProject\app\SubProject\node\u modules\browser sync\node\u modules\socket.io\node\u modules\engine.io\node\u modules\ws\build\bufferutil.vcxproj(18,3):
错误MSB4019:导入的项目“C:\Program Files”
(x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Default.props”是
没有找到。确认声明中的路径为
正确,并且该文件存在于磁盘上
直接在powershell中运行该命令可以正常工作。在powershell中作为脚本的一部分运行该命令可以正常工作。即使直接在powershell中运行“Import Module path/to/psake.psm1;exec{npm install--msvs_version=2013}”也可以正常工作。它只是作为诗篇任务的一部分失败
这到底是怎么回事 不要问我是怎么知道的,但是gyp失败了,因为PATH环境变量中有.NET Framework文件夹 PSake(也是唯一的PSake)将.NET Framework文件夹添加到您的路径中。这通常是件好事,但今天却给你带来了麻烦 要解决此问题,请执行以下操作:
task GypAngerIssues {
if ($env:PATH -like "*C:\Windows\Microsoft.NET\Framework64\v4.0.30319\*") {
$env:PATH = $env:PATH.Replace("C:\Windows\Microsoft.NET\Framework64\v4.0.30319\;", "")
}
exec { & npm install --msvs_version=2013}
}
未来校对的几点注意事项:
闻起来像是在做奇怪的事情。如果你引用这样的论点:
”--msvs_version=2013“
?我尝试了很多方法来调用它,所有这些方法在powershell中都很好,但在psake中都没有成功。我引用了参数、run&“npm”@(“install”、“--msvs_version=2013”)等等。我甚至将npm命令放在一个批处理文件中,并让psake调用cmd/c theBatchFile.bat。这是一个真正的圣歌之谜!诗篇没有做任何特别的事。对我来说,它唯一真正搞砸的是它更改了当前的工作目录。但这与第三个论点无关;查找packages.json可能会导致一些问题。您得到的确切错误消息是什么?我已更新了我的问题,以包含确切的错误消息。您也可以通过拆分$env:PATH
,找到匹配项,将其拉出,然后重新生成路径。在任务开始时保存值,并在任务结束时将其设置回原来的值,这可能也是一个好主意。还有,你怎么知道的;Lold指出Peter找出了为什么这个过程在极其复杂的情况下失败的原因。这就是说,我做了一次可怕的黑客攻击,只是将gyp要查找的目录节点进行了符号链接。