在bat文件中查询npm错误状态

时间:2014-01-02 12:08:10

标签: node.js batch-file npm

我们目前正在将我们的UI项目(总共3个)的构建转移到Grunt。为了简化转换,我想提供一个为每个项目运行npm install的bat文件,但是我想知道在发出此命令时是否出错。它只是我所追求的糖衣,我知道npm回应错误,但我想为团队中不熟悉npmnode的成员提供更简单的信息。

有没有办法检查npm是否遇到错误并随后暂停bat文件?例如,如果未安装node,我只需检查%ERRORLEVEL%是否如果是这种情况,我会回应一些指令并退出执行。我遇到的问题是%ERRORLEVEL%期间发生错误时npm install未设置为1。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:3)

试试这种方式。

在我运行npm的批处理文件中(让我们称之为test.bat)我有这个:

@ECHO OFF
call npm install jquery 2<&1 || exit /b 1
ECHO Continuing...

现在,当我运行test.bat时,我看到了这一点:

jquery@2.1.3 node_modules\jquery
Continuing...

但是,如果我改变&#34; jquery&#34;到不存在的包的名称(即模拟npm失败,正如你所说,不会影响%ERRORLEVEL%)我看到了:

npm ERR! Windows_NT 6.2.9200
npm ERR! argv "C:\\Program Files (x86)\\nodejs\\\\node.exe" "C:\\Program Files (x86)\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "asdasdas"
npm ERR! node v0.10.33
npm ERR! npm  v2.3.0
npm ERR! code ETARGET

npm ERR! notarget No compatible version found: undefined@'*'
npm ERR! notarget No valid targets found.
npm ERR! notarget Perhaps not compatible with your version of node?
npm ERR! notarget This is most likely not a problem with npm itself.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.

npm ERR! Please include the following file with any support request:
npm ERR!     C:\Projects\XXXX\npm-debug.log

注意,&#34; ECHO继续&#34;行未执行。

&#34; 2<&1&#34;部分似乎采用STDERR输出并将其重定向到STDOUT:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/redirection.mspx?mfr=true

  

&#34; ...句柄2(即STDERR),从ipconfig命令处理1   (即STDOUT)......&#34;

我从https://stackoverflow.com/a/10359327/68432

获取此解决方案

答案 1 :(得分:2)

某些命令不会更新ERRORLEVEL。我不太确定node.js的安装方式,但我遇到了NSLOOKUP命令的相同问题。 NPM似乎在自己的实例中运行,这可能解释了为什么它没有更新ERRORLEVEL

我建议您使用简单的重定向将命令的输出写入某个日志文件,然后在文件中搜索指示安装失败的文本。让我们说你正在寻找单词&#34;错误&#34;发生。批处理文件可能如下所示:

    cmd /c "npm install > install.log 2>&1"
    for /f %%a in ('type install.log ^| find /c /i "err"') do set err=%%a
    if "%err%" GTR "0" echo ERROR was encountered during installation

逐步解释一下:

  • cmd /c "npm install > install.log 2>&1"

    执行安装并将输出重定向到install.log。请注意最后的2>&1。这是为了将错误输出和标准保存到单个文件中。 cmd /c的原因是关闭将创建的实例npm。没有它,我就无法做到这一点。

  • for /f %%a in ('type install.log ^| find /c /i "err"') do set err=%%a

    浏览install.log并将变量err设置为包含&#39; err&#39;。

  • 的行数。
  • if "%err%" GTR "0" echo ERROR was encountered during installation

    如果err大于0,则echo自定义消息。

另一种方法可能是对所需的node.js部分进行基本测试,比如执行一些npm命令并检查它们的输出(类似于上面的内容)。但是,我不是node.js的专家,在这一点上无法为您提供进一步的指导。