我有一个非常简单的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会话中退出状态丢失了。
答案 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脚本即可,而无需安装其他工具。