首页 > 解决方案 > npm 模块在 ansible 中不能与 nvm 一起使用

问题描述

我在 ubuntu 18 上使用 Ansible。

问题:无法使用 nvm 安装执行 npm 命令

当我执行以下代码时,我收到错误消息install npm package globally。我应该怎么做才能解决这个问题?请注意,当我在里面 ssh 但不使用 ansible 时,我可以同时运行 nvm 和 npm install

failed: [X.X>X.X] (item=apn) => {"ansible_loop_var": "item", "changed": false, "item": "apn", "msg": "Failed to find required executable npm in paths: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"}

Ansible 剧本:

 roles:
        - role: ansible-role-nvm
            nodejs_version: "12.21.0"
            nvm_profile: "home/{{ ansible_user }}/.bashrc"
    
    tasks:
        - name: install npm package globally
          npm:
            name: "{{ item }}"
            global: yes
            loop: "{{ npm_packages }}"

即使我将 npm 的可执行路径设置为/home/ubuntu/.nvm/versions/node/v12.21.0/bin/npm,它仍然显示错误:

failed: [X.X.X.X] (item=apn) => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"}, "ansible_loop_var": "item", "changed": false, "cmd": "/home/ubuntu/.nvm/versions/node/v12.21.0/bin/npm install --global apn", "item": "apn", "msg": "/usr/bin/env: ‘node’: No such file or directory", "rc": 127, "stderr": "/usr/bin/env: ‘node’: No such file or directory\n", "stderr_lines": ["/usr/bin/env: ‘node’: No such file or directory"], "stdout": "", "stdout_lines": []}

安装后,脚本会将以下代码放入用户.bashrc 中。它在交互式 shell 中工作正常(当 ssh 在服务器中时)

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

标签: node.jsansiblenvm

解决方案


推荐阅读