--- - name: Add NodeSource apt repository ansible.builtin.deb822_repository: name: nodesource types: deb uris: "https://deb.nodesource.com/node_{{ node_major }}.x" suites: nodistro components: main signed_by: "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" state: present register: _nodesource_repo - name: Force NodeSource over the distro nodejs/npm ansible.builtin.copy: dest: /etc/apt/preferences.d/nodesource.pref owner: root group: root mode: "0644" content: | Package: * Pin: origin "deb.nodesource.com" Pin-Priority: 1001 register: _nodesource_pin - name: Refresh apt cache after NodeSource changes ansible.builtin.apt: update_cache: true when: _nodesource_repo is changed or _nodesource_pin is changed - name: Remove distro nodejs/npm (NodeSource nodejs bundles its own npm + npx) ansible.builtin.apt: name: - npm - nodejs state: absent purge: true - name: Install Node.js from NodeSource (includes npm + npx) ansible.builtin.apt: name: nodejs state: latest allow_downgrade: true update_cache: true - name: Verify node / npm / npx available ansible.builtin.command: cmd: "{{ item }} --version" loop: - node - npm - npx changed_when: false