You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:20:24