打开终端未操作即提示completion命令无效ng报错如何解决
问题现象
打开终端未手动执行任何操作时,终端自动输出如下错误提示:
The specified command("completion") is invalid. For a list of available options, run "ng help"
对应报错截图:
产生原因
该错误由Angular CLI(ng命令)触发,核心原因是Shell启动配置文件中存在失效的ng命令自动补全注册脚本:
- 旧版本Angular CLI提供
ng completion子命令用于生成Shell补全脚本,常规配置方式是将该命令的执行逻辑写入Shell启动配置文件(如.zshrc、.bashrc等),实现终端启动时自动加载ng命令的补全能力 - 后续升级、降级Angular CLI版本后,当前安装的
ng版本移除了completion子命令,终端每次启动自动执行配置文件中的补全脚本时,就会触发该错误,因过程无需手动输入命令,会表现为打开终端自动弹出报错。
排查修复步骤
1. 确认当前使用的Shell类型
在终端执行以下命令,查看当前默认Shell:
echo $SHELL
根据输出结果对应需要检查的配置文件路径:
- 输出包含
zsh:检查~/.zshrc、~/.zprofile两个文件 - 输出包含
bash:检查~/.bashrc、~/.bash_profile、~/.profile三个文件
2. 定位配置文件中的失效项
打开上述对应配置文件,搜索所有包含ng completion的行,常见的失效配置格式如下:
# 以下几类配置均会触发该报错 source <(ng completion) eval "$(ng completion)" complete -o default -W "$(ng completion)" ng
3. 按需选择修复方案
方案A:不需要ng命令自动补全
直接删除配置文件中所有和ng completion相关的行,保存文件后执行对应重载命令让配置立即生效,以zsh为例:
source ~/.zshrc
重启终端后报错就不会再出现。
方案B:需要保留ng自动补全功能
首先执行ng version确认当前安装的Angular CLI版本:
- 对于v14及以上版本的Angular CLI,官方支持的自动补全注册命令为
ng completion script,将配置文件中旧的补全行替换为以下内容:source <(ng completion script) - 对于v14以下的旧版本,可降级到对应支持
ng completion命令的CLI版本,或直接删除补全配置放弃该功能
替换完成后执行source命令重载对应Shell配置文件即可,重载后报错消失,补全功能可正常使用。
特殊场景排查
如果修改上述常规Shell配置后报错仍然存在,检查是否是终端增强工具内置了旧版补全逻辑:
- 若使用Oh My Zsh,检查是否启用了内置的
ng插件,旧版本插件内置了失效的补全命令,升级Oh My Zsh或临时禁用ng插件即可解决 - 检查终端工具的自定义启动脚本、第三方终端增强插件中是否存在
ng completion相关执行逻辑,删除对应失效行即可。
内容的提问来源于stack exchange,提问作者Eve-Sama
相关产品推荐
相关产品推荐


