Ansible中执行npm命令报错‘npm:command not found’的解决求助
解决Ansible中npm命令找不到的问题
问题原因
Ansible的每个shell任务都会启动独立的子进程,第一个任务中source $HOME/.nvm/nvm.sh && nvm use 16.16.0设置的环境变量,无法传递到后续的任务进程中,导致第二个任务执行时找不到npm命令。
解决方案
方案1:合并任务到同一个shell进程
将nvm环境初始化和构建命令放在同一个shell任务中,确保环境变量在同一进程内生效:
- name: Run build-dev shell: | source $HOME/.nvm/nvm.sh && nvm use 16.16.0 cd /home/ec2-user/ofiii npm install npm run build-dev become: yes become_user: root when: platform == "dev"
此方案可以删除原来单独的Use npm任务。
方案2:使用npm的绝对路径执行
先在目标机器的root用户下执行which npm,获取npm的绝对路径(例如/root/.nvm/versions/node/v16.16.0/bin/npm),然后在任务中直接使用绝对路径调用:
- name: Run build-dev shell: | cd /home/ec2-user/ofiii /root/.nvm/versions/node/v16.16.0/bin/npm install /root/.nvm/versions/node/v16.16.0/bin/npm run build-dev become: yes become_user: root when: platform == "dev"
方案3:在任务中指定环境变量PATH
将nvm管理的node/bin目录加入到任务的PATH环境变量中,让系统能找到npm:
- name: Run build-dev shell: | cd /home/ec2-user/ofiii npm install npm run build-dev become: yes become_user: root environment: PATH: "/root/.nvm/versions/node/v16.16.0/bin:{{ ansible_env.PATH }}" when: platform == "dev"
注意:路径需要替换为你机器上实际的node版本目录。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

