npm运行deploy脚本提示aws未识别,bash中aws命令正常如何解决?
问题解决方法
问题根源:npm执行scripts时用的是非交互式Shell环境,.bashrc里定义的别名不会被加载,所以找不到aws命令。
下面是几种可行的解决办法:
方法一:直接在脚本里使用aws.exe的完整路径
把package.json里的deploy命令改成直接调用aws的完整路径,避开别名:
"scripts": { "deploy": "winpty \"C:/Program Files/Amazon/AWSCLIV2/aws.exe\" s3 sync ./out s3://[my bucket name] --acl public-read --delete" }
注意路径里有空格,要用双引号把整个路径包起来,避免Shell解析出错。
方法二:把AWS CLI路径加入系统环境变量
- 打开系统环境变量设置(Windows可右键此电脑→属性→高级系统设置→环境变量)
- 在系统变量的
PATH里添加C:/Program Files/Amazon/AWSCLIV2 - 重启所有终端和bash窗口,之后不管是直接在bash里还是npm脚本里,都能直接用
aws命令,原来的deploy脚本无需修改就能运行。
方法三:用Shell函数替代别名
把.bashrc里的别名改成函数,确保非交互式Shell也能加载这个函数:
- 打开
.bashrc,把原来的别名替换成:
aws() { winpty C:/Program\ Files/Amazon/AWSCLIV2/aws.exe "$@" }
- 检查
.bashrc开头,如果有[ -z "$PS1" ] && return这类阻止非交互式Shell加载的语句,将其注释掉;或者把函数定义放到.bash_profile中(部分环境下非交互式Shell会加载该文件)。
内容的提问来源于stack exchange,提问作者hyeogeon
相关产品推荐
相关产品推荐

