shell脚本执行npm install报EINVALIDTAGNAME错误,直接运行正常如何解决?
错误原因
该报错本质是传入npm命令的参数中存在非法不可见字符,核心诱因基本都是脚本换行符格式不兼容:
- 你大概率是在Windows环境下编写/修改过该.sh脚本,Windows默认的换行符为
\r\n(CRLF格式),而Ubuntu系统默认识别的脚本换行符为\n(LF格式) - 执行脚本时,行尾多余的
\r回车符会被shell当作命令参数的一部分传入npm,相当于实际执行的命令为npm install 包名\r,npm会将不可见的\r识别为包标签的组成部分,而回车符属于encodeURIComponent会编码的非法字符,因此触发报错 - 直接在终端输入命令时使用的是Ubuntu原生LF换行,没有多余的不可见字符,所以运行正常
- 少数情况是脚本编写时不小心混入了其他不可见特殊字符、半角全角符号混写,也会触发同类报错
解决方法
方法1:转换脚本换行符格式(最常用)
直接在Ubuntu终端使用dos2unix工具转换脚本编码即可:
- 安装dos2unix:
sudo apt update && sudo apt install dos2unix - 执行格式转换:
dos2unix 你的脚本文件名.sh - 重新运行脚本即可正常安装依赖
方法2:手动重建脚本(适合短脚本)
直接在Ubuntu环境下用vim、nano等编辑器新建脚本,逐行输入安装命令,不要复制Windows下编辑的内容,保存后执行即可。
问题验证方法
执行命令cat -A 你的脚本文件名.sh查看脚本原始内容:
- 如果行尾显示为
^M$,说明确实存在CRLF换行符问题 - 同时可以直接查看是否有其他异常的不可见字符,直接删除即可解决问题
内容的提问来源于stack exchange,提问作者Upioti
相关产品推荐
相关产品推荐

