从Windows

时间:2018-01-22 18:22:37

标签: node.js windows bash npm

我有一个非常简单的shell脚本,test.sh

#!/usr/bin/env bash

exit 1

我是通过test

中的package.json运行脚本来调用它的
"scripts": {
  "test": "test.sh && echo \"unexpected output\""
},

正在运行npm test我明白了:

$ npm test

> testtest@1.0.0 test C:\Users\[path]\testtest
> test.sh && echo "unexpected output"

"unexpected output"

好像npm并不关心test.sh的非零退出代码。我没想到会看到“意外的输出”。

"test"命令执行的某个步骤(在这种情况下为test.sh)退出时出现错误,如何停止执行"test": "test.sh && echo $?",命令?

在我的package.json中有这个:$ npm test > testtest@1.0.0 test C:\Users\[path]\testtest > test.sh && echo $? $?
这是输出:

"test": "test.sh && echo \"$?\"",

这样:$ npm test > testtest@1.0.0 test C:\Users\[path]\testtest > test.sh && echo "$?" "$?"
我明白了:

test.sh

作为一个完整性检查,我在#!/usr/bin/env bash exit 1 echo "This should not print" 退出后添加了一个回音。谢天谢地,它不会打印:)

echo

“我不应该打印”文字永远不会出现在我的控制台中。

实际上,在exit 1之前添加 class Goods(models.Model): category = models.ForeignKey(GoodsCategory, verbose_name='xxx') goods_sn = models.CharField(default='', max_length=50, verbose_name='xxx') name = models.CharField(max_length=300, verbose_name='xxx') click_num = models.IntegerField(default=0, verbose_name='xxx') sold_num = models.IntegerField(default=0, verbose_name='xxx') 也不会向我的GitBash控制台打印任何内容。而是打印到npm启动的临时cmd窗口。所以我猜测在该cmd会话中退出状态丢失了。

1 个答案:

答案 0 :(得分:1)

这对我有用:

"scripts": {
  "test": "bash test.sh && echo \"unexpected output\""
},

使用附加的“ bash”,脚本在当前的Git Bash中运行。未打印“意​​外输出”。 如果我省略“ bash”,则将打开一个新的Bash窗口,并且还会得到“意外输出”。

$ npm test

> npm2@1.0.0 test D:\Martin\dev\npm-test\npm2
> bash test.sh && echo "unexpected output"

Hi from script! Next: exit 1
npm ERR! Test failed.  See above for more details.

作为旁注,如果您要开发跨平台的Node.js项目,最好避免使用Bash / Cmd / Powershell脚本。只需使用Node.js脚本即可,而无需安装其他工具。