提问者:小点点

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


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

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

任何帮助赞赏!


共2个答案

匿名用户

试试这种方式。

在我运行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...

但是,如果我将“jquery”更改为不存在的包的名称(即模拟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

请注意,“回声继续”行不会被执行。

2

"…句柄2(即STDERR),从ipconfig命令到句柄1(即STDOUT)…"

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

匿名用户

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

我可以建议您使用简单的重定向将命令的输出写入一些日志文件,然后在文件中搜索指示安装不成功的文本。假设您正在查找单词“错误”出现的次数。批处理文件可以如下所示:

    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 /cnpm安装

    执行安装并将输出重定向到install. log。注意2

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

    浏览install. log并将变量err设置为包含“err”的行数。

    如果安装过程中遇到“%err%”GTR“0”回显ERROR

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

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