我需要确保安装了一些NPM依赖项,其中一些使用node_gyp进行编译。这意味着我必须调用“npm install --msvs_version = 2013”,因此node_gyp将使用我的vs.net 2013编译器。但由于某种原因,将此添加到psake任务失败。看起来它没有正确传递第三个参数。
task npmInstall {
exec {npm install --msvs_version=2013}
}
调用“./psake npmInstall”会导致它运行,但是node_gyp失败,因为它没有获得第三个参数。错误似乎很清楚 - 它没有使用2013 CPP文件。如果它说V110它应该说V120(通常通过调用--msvs_version2013来解决):
C:\项目\ MyProject的\应用\子项目\ node_modules \浏览器同步\ node_modules \ socket.io \ node_modules \ engine.io \ node_modules \ WS \建立\ 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}”也能正常工作。它只能作为psake任务的一部分失败。
这可能会发生什么?
答案 0 :(得分:1)
不要问我怎么知道这个,但gyp失败了,因为你的PATH环境变量中有.NET Framework文件夹。
PSake,只有PSake,将.NET Framework文件夹添加到PATH中。这通常是一件好事,但今天它会给你带来麻烦。
要解决此问题,请执行以下操作:
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}
}
有关面向未来的一些注意事项: