node.js - 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"
解决方案
推荐阅读
- angular - 地理位置在浏览器中有效,但在设备上显示 PositionError
- c++ - 没有重载函数“std::make_unique”的实例与参数列表匹配,但适用于 unique_ptr 构造函数
- excel - vba 未访问共享点站点使用 FSO 出现错误
- swiftui - SwiftUI 相当于 apportionsSegmentWidthsByContent?
- python - 基类可以访问父类的方法吗
- javascript - 如何在 JavaScript 中迭代多个异步等待函数并链接在一起?
- laravel - 如何使用 vue.js 从 laravel 关系中查询数据?[拉拉维尔,vue]
- angular - 在 stackblitz Angular 项目中找不到文件
- java - java运行时多态性超类参考中的抽象类
- r - 如何在 R 中绘制箱形图以检测大量行的异常值?