如何让npm run仅显示脚本输出,屏蔽自身额外输出?
解决方案:让npm静默但保留脚本输出
我之前也碰到过这个头疼的问题——npm默认输出的那些前缀行确实会干扰脚本的输出解析,下面几个方法亲测有效:
调整npm日志级别:
试试用--loglevel error参数,它只会保留npm的错误信息,屏蔽掉> my-package@1.0.0 do-thing...这类info级别的输出,同时完全保留你的脚本本身的输出。命令示例:npm run do-thing --loglevel error用更简洁的缩写
--loglevel err也能达到同样效果。在脚本前添加@符号抑制命令打印:
如果只是不想看到> do-thing这一行,可以直接在package.json的脚本命令前加@。比如:{ "scripts": { "do-thing": "@node ./your-script.js" } }这个符号会让npm不打印执行的命令本身,但仍会保留包版本和路径那一行,若要完全去掉那行,需要结合日志级别参数一起使用。
管道过滤(适用于类Unix环境):
如果上面的方法都不满足,你可以用shell管道过滤掉所有以>开头的行,精准去掉npm的前缀输出。命令示例:npm run do-thing 2>&1 | grep -v "^>"注意这个方法依赖类Unix shell环境,Windows下可能需要用PowerShell的类似命令或WSL来实现。
使用npm exec替代npm run:
另一个思路是用npm exec执行脚本,它的默认输出更干净,不会打印那些前缀行。命令示例:npm exec --package=. -- do-thing不过这个方法需要确保你的脚本在package.json的
bin字段里已经正确配置。
内容的提问来源于stack exchange,提问作者ChrisJ
相关产品推荐
相关产品推荐

