如何禁用react-scripts test的彩色输出?
我明白你在CI流水线里遇到的问题了——直接给react-scripts test加--no-colors确实不会生效,因为react-scripts的参数解析需要特定的方式。这里有几个靠谱的解决方案,适配你的React 17 + create-react-app场景:
方法一:利用CI环境变量(最推荐,官方适配)
create-react-app的测试脚本会自动检测CI环境变量,当它设为true时,会自动禁用颜色输出,同时调整其他适合CI的测试行为(比如跑完就退出,不进入watch模式)。你可以直接在CI命令里这样运行:
CI=true npm test
或者在你的CI流水线配置里先设置环境变量CI=true,再执行测试命令,这样就不用每次手动加参数了。
方法二:通过--传递jest原生参数
react-scripts允许你用--来分隔自身的参数和要传递给jest的参数,所以你可以这样写命令:
react-scripts test -- --no-colors
这样--no-colors就会正确传递给jest,禁用彩色输出。如果你的CI里需要其他jest参数,也可以用同样的方式追加,比如加上--watchAll=false强制不进入watch模式。
方法三:全局配置jest(需自定义配置工具)
如果你不想每次命令都加参数,且已经用了craco或者react-app-rewired这类可以覆盖create-react-app配置的工具,可以在你的配置文件里添加jest的颜色禁用设置:
比如在craco.config.js里:
module.exports = { jest: { configure: { colors: false } } };
注意:如果没有用这类工具,直接在package.json里加"jest": { "colors": false }可能不会生效,因为create-react-app会覆盖默认的jest配置,除非你执行eject(不推荐,会失去官方更新支持)。
这几个方法里,方法一和方法二都是无需修改项目配置的,非常适合CI场景,推荐优先尝试方法一,因为它是官方为CI环境优化的行为。
内容的提问来源于stack exchange,提问作者Banjer

