npm安装有时在Visual Studio Online中失败

时间:2015-07-22 18:14:08

标签: powershell npm visual-studio-2015 nuget azure-devops

我遇到了VS Online和nuget-restore的问题。它会报告它无法找到Visual Studio 2015找到并安装的软件包。所以我在nuget的目标文件中指定使用API​​v3和APIv2。因为,所有的nuget包总是被找到,但是我开始遇到npm的不同的,相当随机的错误。

我有一个预构建脚本(在我的项目文件中配置),它安装了所有必需的npm和bower包,然后运行gulp。这在本地工作正常,大多数时候也在线。但是平均每次〜第4次,我得到一个类似的例外:

EPERM, open 'C:\NPM\Cache\fedb6d47-PM-Cache-clone-1-0-2-package-tgz.lock'

或者这个:

EPERM, open 'C:\NPM\Cache\ca5822dc-sh-isarguments-3-0-4-package-tgz.lock'

我在开始时正在研究gulpfile,所以我认为其中一些变化导致了它,但是现在,我甚至都没有触及那个项目了,它编译得很好,直到突然我再次遇到这个错误。

与此同时,我添加了一个微小的更改来提交并推送它,它再次编译好。知道什么可以导致这种情况,以及我如何能够至少降低获得该错误的风险?

这是我的pre-build powershell脚本:

param($build_config)

$webProjectName = "WEB_PROJECT"
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath

cd $dir
cd ..\src\$webProjectName

echo "npm install"
npm install

echo "bower install"
bower install

echo "gulp $build_config"
gulp $build_config

更新

我曾经通过

执行powershell脚本
PowerShell -File script.ps1

并在切换到

之后
PowerShell -NonInteractive -NoProfile -Command script.ps1

它似乎已经修复了错误,但是在成功构建~20次之后,我又遇到了类似的问题(尽管现在情况要少得多)

1 个答案:

答案 0 :(得分:0)

进一步的调查表明,网络连接或代理可能存在一些问题,这很奇怪,因为bower install总是成功的。无论如何,对我来说工作得很好的解决方案如下:

  • 作为第一步,使用visual studio online中的原生 npm安装构建步骤
  • 向构建服务添加一个环境变量,以便在脚本中识别它在构建服务器上运行(我称之为VSO并为其分配值1)
  • 检查你的脚本是否在构建服务器上运行,在powershell中你可以这样做:

    If ($env:VSO -ne 1)
    {
      echo "npm install"
      npm install
    }