Impossible to create /node/modules directory for TypeScript or Javascript code and modules

hello,
I need help for my symfony 6.4 project.
my ansible version by pipx manager informatic linux programm is : 2.20.2
it’s impossible to execute my playbook correctly , see this :

---
- hosts: servers
  vars_files:
    - ./ansible/group_vars/all/vault.yml
  become: yes
  vars:
    symfony_root: /var/www/X
    local_project_root: "/home/alexandre/Documents/X"
    nvm_dir: "/usr/local/nvm"
    nvm_version: "v0.40.3"
    node_version: "24.7.0"
    composer_path: "/usr/local/bin/composer"  # Chemin fixe car vous l'avez confirmé

  tasks:
    - debug:
        msg: "Ansible version: {{ ansible_version.full }}"

    # === 1. Vérification de Composer (déjà installé selon vous) ===
    - name: Vérifier que Composer est accessible
      command: "{{ composer_path }} --version --no-interaction"
      register: composer_check
      ignore_errors: yes
      changed_when: false
      environment:
        COMPOSER_ALLOW_SUPERUSER: "1"  # Autorise l'exécution en root
        COMPOSER_NO_INTERACTION: "1"   # Désactive les prompts

    - name: Échouer si Composer n'est pas disponible
      fail:
        msg: "Composer n'est pas installé dans {{ composer_path }}. Veuillez l'installer manuellement."
      when: composer_check.rc != 0

    # === 2. Installation de NVM et Node.js ===
    - name: Créer un répertoire global pour NVM
      file:
        path: "{{ nvm_dir }}"
        state: directory
        owner: root
        group: root
        mode: '0755'

    - name: Télécharger et installer nvm globalement
      shell: |
        curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/{{ nvm_version }}/install.sh | bash
      args:
        creates: "{{ nvm_dir }}/nvm.sh"
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PROFILE: "/dev/null"

    - name: Installer Node.js avec NVM
      shell: |
        export NVM_DIR="{{ nvm_dir }}"
        [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
        nvm install {{ node_version }}
        nvm use {{ node_version }}
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"

    # === 3. Préparation du projet ===
    - name: Créer le répertoire du projet avec les bonnes permissions
      file:
        path: "{{ symfony_root }}"
        state: directory
        owner: www-data
        group: www-data
        mode: '0755'

    - name: Créer les répertoires nécessaires pour Symfony
      block:
        - name: Créer var/log
          file:
            path: "{{ symfony_root }}/var/log"
            state: directory
            owner: www-data
            group: www-data
            mode: '0775'

        - name: Créer var/cache
          file:
            path: "{{ symfony_root }}/var/cache"
            state: directory
            owner: www-data
            group: www-data
            mode: '0775'

        - name: Créer .npm pour www-data
          file:
            path: "/home/www-data/.npm"
            state: directory
            owner: www-data
            group: www-data
            mode: '0755'

    # === 4. Synchronisation des fichiers ===
    - name: Synchroniser les fichiers du projet
      ansible.posix.synchronize:
        src: "{{ local_project_root }}/"
        dest: "{{ symfony_root }}"
        delete: yes
        mode: push
        compress: true
        rsync_opts:
          - "--iconv=utf-8,utf-8"
          - "--exclude=.git"
          - "--exclude=*.sh"
          - "--exclude=/vendor"
          - "--exclude=/ansible"
          - "--exclude=/node_modules"
          - "--exclude=var/cache/*"
          - "--exclude=var/log/*"
          - "--exclude=.env.local"
          - "--exclude=package-lock.json"
      become: no
      delegate_to: localhost

    # === 5. Gestion des permissions ===
    - name: Corriger les permissions du projet
      file:
        path: "{{ symfony_root }}"
        state: directory
        owner: www-data
        group: www-data
        recurse: yes

    # === 6. Gestion de node_modules ===
    - name: Supprimer package-lock.json s'il existe
      file:
        path: "{{ symfony_root }}/package-lock.json"
        state: absent

    - name: Créer un nouveau package-lock.json
      command: npm install --package-lock-only
      args:
        chdir: "{{ symfony_root }}"
      become: yes
      become_user: www-data
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
        HOME: "/home/www-data"
        npm_config_cache: "/home/www-data/.npm"

    - name: Mettre à jour les paquets npm si node_modules existe
      command: npm update
      args:
        chdir: "{{ symfony_root }}"
      become: yes
      become_user: www-data
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
        HOME: "/home/www-data"
        npm_config_cache: "/home/www-data/.npm"
      when: lookup('fileglob', symfony_root + '/node_modules/*', wantlist=True) | length > 0

          # === Correction des versions Symfony ===
    # - name: Corriger les versions Symfony dans composer.json
    #   replace:
    #     path: "{{ symfony_root }}/composer.json"
    #     regexp: '"symfony/(http-client|process|security-bundle|validator)": "[^"]*"'
    #     replace: '"symfony/\1": "^6.4"'
    #   become: yes
    #   become_user: www-data

    # - name: Supprimer composer.lock pour permettre la mise à jour
    #   file:
    #     path: "{{ symfony_root }}/composer.lock"
    #     state: absent
    #   become: yes
    #   become_user: www-data


    # === 7. Gestion de Symfony (avec gestion d'erreurs) ===
    - name: Gérer les dépendances Symfony
      block:
        - name: Vérifier si symfony/runtime est installé
          command: "{{ composer_path }} show symfony/runtime"
          args:
            chdir: "{{ symfony_root }}"
          register: runtime_check
          ignore_errors: yes
          changed_when: false
          become: yes
          become_user: www-data
          environment:
            COMPOSER_HOME: "/home/www-data/.composer"
            PATH: "/usr/local/bin:{{ ansible_env.PATH }}"

        - name: Installer symfony/runtime si nécessaire
          command: "{{ composer_path }} require symfony/runtime --no-interaction --optimize-autoloader"
          args:
            chdir: "{{ symfony_root }}"
          become: yes
          become_user: www-data
          when: runtime_check.rc is defined and runtime_check.rc != 0
          environment:
            COMPOSER_HOME: "/home/www-data/.composer"
            COMPOSER_NO_INTERACTION: "1"
            PATH: "/usr/local/bin:{{ ansible_env.PATH }}"

       

        - name: Installer les dépendances Composer
          command: "{{ composer_path }} install --optimize-autoloader --no-interaction"
          args:
            chdir: "{{ symfony_root }}"
          become: yes
          become_user: www-data
          environment:
             COMPOSER_HOME: "/home/www-data/.composer"
             COMPOSER_ALLOW_SUPERUSER: "1"
             COMPOSER_NO_INTERACTION: "1"
             APP_ENV: dev
             PATH: "/usr/local/bin:{{ ansible_env.PATH }}"

        - name: Nettoyer le cache Symfony
          command: "php bin/console cache:clear --env=dev"
          args:
            chdir: "{{ symfony_root }}"
          become: yes
          become_user: www-data
          environment:
            APP_ENV: dev
            PATH: "/usr/local/bin:{{ ansible_env.PATH }}"


      rescue:
        - name: Afficher l'erreur détaillée
          debug:
            var: ansible_failed_result

        - name: Créer le fichier de log si absent
          file:
            path: "{{ symfony_root }}/var/log/prod.log"
            state: touch
            owner: www-data
            group: www-data
            mode: '0664'

        - name: Vérifier les logs Symfony (si le fichier existe)
          command: "tail -n 20 {{ symfony_root }}/var/log/prod.log"
          register: symfony_logs
          ignore_errors: yes
          become: yes
          become_user: www-data

        - name: Afficher les logs
          debug:
            var: symfony_logs.stdout_lines
          when: symfony_logs.stdout is defined and symfony_logs.stdout | length > 0

        - name: Redémarrer PHP-FPM
          service:
            name: "php8.3-fpm"
            state: restarted
          when: ansible_os_family == 'Debian'
          become: yes

i would like to have more verbosity in my feedback, but i don’t know exactly how ?can you help me for this first detail

the feedback is this/that (excuses me for my english) :

alexandre@alexandre-Matebook:~/Documents/X$ ansible-playbook -i ./ansible/inventory.ini  ./ansible/playbookQuatre.yml 

PLAY [servers] **********************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************
ok: [ubuntu]

TASK [debug] ************************************************************************************************************************************************************
ok: [ubuntu] => {
    "msg": "Ansible version: 2.20.2"
}

TASK [Vérifier que Composer est accessible] *****************************************************************************************************************************
ok: [ubuntu]

TASK [Échouer si Composer n'est pas disponible] *************************************************************************************************************************
skipping: [ubuntu]

TASK [Créer un répertoire global pour NVM] ******************************************************************************************************************************
ok: [ubuntu]

TASK [Télécharger et installer nvm globalement] *************************************************************************************************************************
ok: [ubuntu]

TASK [Installer Node.js avec NVM] ***************************************************************************************************************************************
changed: [ubuntu]

TASK [Créer le répertoire du projet avec les bonnes permissions] ********************************************************************************************************
changed: [ubuntu]

TASK [Créer var/log] ****************************************************************************************************************************************************
changed: [ubuntu]

TASK [Créer var/cache] **************************************************************************************************************************************************
changed: [ubuntu]

TASK [Créer .npm pour www-data] *****************************************************************************************************************************************
ok: [ubuntu]

TASK [Synchroniser les fichiers du projet] ******************************************************************************************************************************
changed: [ubuntu -> localhost]

TASK [Corriger les permissions du projet] *******************************************************************************************************************************
changed: [ubuntu]

TASK [Supprimer package-lock.json s'il existe] **************************************************************************************************************************
changed: [ubuntu]

TASK [Créer un nouveau package-lock.json] *******************************************************************************************************************************
changed: [ubuntu]

TASK [Mettre à jour les paquets npm si node_modules existe] *************************************************************************************************************
[WARNING]: Unable to find '/var/www/X/node_modules' in expected paths (use -vvvvv to see paths)
skipping: [ubuntu]

TASK [Vérifier si symfony/runtime est installé] *************************************************************************************************************************
ok: [ubuntu]

TASK [Installer symfony/runtime si nécessaire] **************************************************************************************************************************
skipping: [ubuntu]

TASK [Installer les dépendances Composer] *******************************************************************************************************************************
changed: [ubuntu]

TASK [Nettoyer le cache Symfony] ****************************************************************************************************************************************
changed: [ubuntu]

PLAY RECAP **************************************************************************************************************************************************************
ubuntu                     : ok=17   changed=10   unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   

alexandre@alexandre-Matebook:~/Documents/X$ 

could you help me ?

ok npm was not installed on the remote server ,
i’ve just typed this :

# Solution temporaire (par shell) :
export NVM_DIR=/usr/local/nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
nvm use 24.7.0
echo $PATH  # Vérifie que npm est là

cd /var/www/AnalyticaTechCode
npm --version  # OK maintenant
npm ci         # Installe node_modules (avec package-lock.json)

and this :

export NVM_DIR=/usr/local/nvm
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm use 24.7.0  # Ou 'nvm alias default 24.7.0'

but the playbook display same probleme, ans i nedd help to increase, improve the verbosity of the tasks

Regards
Alexandre M

Add “-vv” to your ansible-playbook command:

ansible-playbook -i ./ansible/inventory.ini  ./ansible/playbookQuatre.yml -vv

hello !
thanks you very mmuch for your answer !

I’ve this with little task uncommented :

---
- hosts: servers
  vars_files:
    - ./ansible/group_vars/all/vault.yml
  become: yes
  vars:
    symfony_root: /var/www/X
    local_project_root: "/home/alexandre/Documents/X"
    nvm_dir: "/usr/local/nvm"
    nvm_version: "v0.40.3"
    node_version: "24.7.0"
    composer_path: "/usr/local/bin/composer"  # Chemin fixe car vous l'avez confirmé

  tasks:
    - debug:
        msg: "Ansible version: {{ ansible_version.full }}"

    # === 1. Vérification de Composer (déjà installé selon vous) ===
    - name: Vérifier que Composer est accessible
      command: "{{ composer_path }} --version --no-interaction"
      register: composer_check
      ignore_errors: yes
      changed_when: false
      environment:
        COMPOSER_ALLOW_SUPERUSER: "1"  # Autorise l'exécution en root
        COMPOSER_NO_INTERACTION: "1"   # Désactive les prompts

    - name: Échouer si Composer n'est pas disponible
      fail:
        msg: "Composer n'est pas installé dans {{ composer_path }}. Veuillez l'installer manuellement."
      when: composer_check.rc != 0

    # === 2. Installation de NVM et Node.js ===
    - name: Créer un répertoire global pour NVM
      file:
        path: "{{ nvm_dir }}"
        state: directory
        owner: root
        group: root
        mode: '0755'

    - name: Télécharger et installer nvm globalement
      shell: |
        curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/{{ nvm_version }}/install.sh | bash
      args:
        creates: "{{ nvm_dir }}/nvm.sh"
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PROFILE: "/dev/null"

    - name: Installer Node.js avec NVM
      shell: |
        export NVM_DIR="{{ nvm_dir }}"
        [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
        nvm install {{ node_version }}
        nvm use {{ node_version }}
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"

    # === 3. Préparation du projet ===
    - name: Créer le répertoire du projet avec les bonnes permissions
      file:
        path: "{{ symfony_root }}"
        state: directory
        owner: www-data
        group: www-data
        mode: '0755'

    - name: Créer les répertoires nécessaires pour Symfony
      block:
        - name: Créer var/log
          file:
            path: "{{ symfony_root }}/var/log"
            state: directory
            owner: www-data
            group: www-data
            mode: '0775'

        - name: Créer var/cache
          file:
            path: "{{ symfony_root }}/var/cache"
            state: directory
            owner: www-data
            group: www-data
            mode: '0775'

        - name: Créer .npm pour www-data
          file:
            path: "/home/www-data/.npm"
            state: directory
            owner: www-data
            group: www-data
            mode: '0755'

    # === 4. Synchronisation des fichiers ===
    - name: Synchroniser les fichiers du projet
      ansible.posix.synchronize:
        src: "{{ local_project_root }}/"
        dest: "{{ symfony_root }}"
        delete: yes
        mode: push
        compress: true
        rsync_opts:
          - "--iconv=utf-8,utf-8"
          - "--exclude=.git"
          - "--exclude=*.sh"
          - "--exclude=/vendor"
          - "--exclude=/ansible"
          - "--exclude=/node_modules"
          - "--exclude=var/cache/*"
          - "--exclude=var/log/*"
          - "--exclude=.env.local"
          - "--exclude=package-lock.json"
      become: no
      delegate_to: localhost

    # === 5. Gestion des permissions ===
    - name: Corriger les permissions du projet
      file:
        path: "{{ symfony_root }}"
        state: directory
        owner: www-data
        group: www-data
        recurse: yes

    # === 6. Gestion de node_modules ===
    - name: Supprimer package-lock.json s'il existe
      file:
        path: "{{ symfony_root }}/package-lock.json"
        state: absent

    - name: Créer un nouveau package-lock.json
      command: npm install --package-lock-only
      args:
        chdir: "{{ symfony_root }}"
      become: yes
      become_user: www-data
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
        HOME: "/home/www-data"
        npm_config_cache: "/home/www-data/.npm"

    - name: Mettre à jour les paquets npm si node_modules existe
      command: npm update
      args:
        chdir: "{{ symfony_root }}"
      become: yes
      become_user: www-data
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
        HOME: "/home/www-data"
        npm_config_cache: "/home/www-data/.npm"
      when: lookup('fileglob', symfony_root + '/node_modules/*', wantlist=True) | length > 0

          === Correction des versions Symfony ===
    - name: Corriger les versions Symfony dans composer.json
      replace:
        path: "{{ symfony_root }}/composer.json"
        regexp: '"symfony/(http-client|process|security-bundle|validator)": "[^"]*"'
        replace: '"symfony/\1": "^6.4"'
      become: yes
      become_user: www-data

    - name: Supprimer composer.lock pour permettre la mise à jour
      file:
        path: "{{ symfony_root }}/composer.lock"
        state: absent
      become: yes
      become_user: www-data


    # === 7. Gestion de Symfony (avec gestion d'erreurs) ===
    - name: Gérer les dépendances Symfony
      block:
        - name: Vérifier si symfony/runtime est installé
          command: "{{ composer_path }} show symfony/runtime"
          args:
            chdir: "{{ symfony_root }}"
          register: runtime_check
          ignore_errors: yes
          changed_when: false
          become: yes
          become_user: www-data
          environment:
            COMPOSER_HOME: "/home/www-data/.composer"
            PATH: "/usr/local/bin:{{ ansible_env.PATH }}"

        - name: Installer symfony/runtime si nécessaire
          command: "{{ composer_path }} require symfony/runtime --no-interaction --optimize-autoloader"
          args:
            chdir: "{{ symfony_root }}"
          become: yes
          become_user: www-data
          when: runtime_check.rc is defined and runtime_check.rc != 0
          environment:
            COMPOSER_HOME: "/home/www-data/.composer"
            COMPOSER_NO_INTERACTION: "1"
            PATH: "/usr/local/bin:{{ ansible_env.PATH }}"

       

        - name: Installer les dépendances Composer
          command: "{{ composer_path }} install --optimize-autoloader --no-interaction"
          args:
            chdir: "{{ symfony_root }}"
          become: yes
          become_user: www-data
          environment:
             COMPOSER_HOME: "/home/www-data/.composer"
             COMPOSER_ALLOW_SUPERUSER: "1"
             COMPOSER_NO_INTERACTION: "1"
             APP_ENV: dev
             PATH: "/usr/local/bin:{{ ansible_env.PATH }}"

        - name: Nettoyer le cache Symfony
          command: "php bin/console cache:clear --env=dev"
          args:
            chdir: "{{ symfony_root }}"
          become: yes
          become_user: www-data
          environment:
            APP_ENV: dev
            PATH: "/usr/local/bin:{{ ansible_env.PATH }}"


      rescue:
        - name: Afficher l'erreur détaillée
          debug:
            var: ansible_failed_result

        - name: Créer le fichier de log si absent
          file:
            path: "{{ symfony_root }}/var/log/prod.log"
            state: touch
            owner: www-data
            group: www-data
            mode: '0664'

        - name: Vérifier les logs Symfony (si le fichier existe)
          command: "tail -n 20 {{ symfony_root }}/var/log/prod.log"
          register: symfony_logs
          ignore_errors: yes
          become: yes
          become_user: www-data

        - name: Afficher les logs
          debug:
            var: symfony_logs.stdout_lines
          when: symfony_logs.stdout is defined and symfony_logs.stdout | length > 0

        - name: Redémarrer PHP-FPM
          service:
            name: "php8.3-fpm"
            state: restarted
          when: ansible_os_family == 'Debian'
          become: yes

And the feedback

alexandre@alexandre-Matebook:~/Documents/X$ ansible-playbook -i ./ansible/inventory.ini  ./ansible/playbookQuatre.yml -vv
ansible-playbook [core 2.20.2]
  config file = /home/alexandre/Documents/X/ansible.cfg
  configured module search path = ['/home/alexandre/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/alexandre/.local/share/pipx/venvs/ansible/lib/python3.12/site-packages/ansible
  ansible collection location = /home/alexandre/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/alexandre/.local/bin/ansible-playbook
  python version = 3.12.3 (main, Jan 22 2026, 20:57:42) [GCC 13.3.0] (/home/alexandre/.local/share/pipx/venvs/ansible/bin/python)
  jinja version = 3.1.6
  pyyaml version = 6.0.2 (with libyaml v0.2.5)
Using /home/alexandre/Documents/X/ansible.cfg as config file
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
....

TASK [Créer un répertoire global pour NVM] ******************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:34
ok: [ubuntu] => {"changed": false, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/usr/local/nvm", "size": 4096, "state": "directory", "uid": 0}

TASK [Télécharger et installer nvm globalement] *************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:42
ok: [ubuntu] => {"changed": false, "cmd": "curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash\n", "delta": null, "end": null, "msg": "Did not run command since '/usr/local/nvm/nvm.sh' exists", "rc": 0, "start": null, "stderr": "", "stderr_lines": [], "stdout": "skipped, since /usr/local/nvm/nvm.sh exists", "stdout_lines": ["skipped, since /usr/local/nvm/nvm.sh exists"]}

TASK [Installer Node.js avec NVM] ***************************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:51
changed: [ubuntu] => {"changed": true, "cmd": "export NVM_DIR=\"/usr/local/nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] && \\. \"$NVM_DIR/nvm.sh\"\nnvm install 24.7.0\nnvm use 24.7.0\n", "delta": "0:00:01.288132", "end": "2026-02-09 11:51:16.162305", "msg": "", "rc": 0, "start": "2026-02-09 11:51:14.874173", "stderr": "v24.7.0 is already installed.", "stderr_lines": ["v24.7.0 is already installed."], "stdout": "Now using node v24.7.0 (npm v11.9.0)\nNow using node v24.7.0 (npm v11.9.0)", "stdout_lines": ["Now using node v24.7.0 (npm v11.9.0)", "Now using node v24.7.0 (npm v11.9.0)"]}

TASK [Créer le répertoire du projet avec les bonnes permissions] ********************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:62
changed: [ubuntu] => {"changed": true, "gid": 33, "group": "www-data", "mode": "0755", "owner": "www-data", "path": "/var/www/X", "size": 4096, "state": "directory", "uid": 33}

TASK [Créer var/log] ****************************************************************************************************************************************************
... ok

TASK [Créer var/cache] **************************************************************************************************************************************************
.... ok

TASK [Créer .npm pour www-data] *****************************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:88
ok: [ubuntu] => {"changed": false, "gid": 33, "group": "www-data", "mode": "0755", "owner": "www-data", "path": "/home/www-data/.npm", "size": 4096, "state": "directory", "uid": 33}

TASK [Synchroniser les fichiers du projet] ******************************************************************************************************************************
... ok

TASK [Corriger les permissions du projet] *******************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:119
changed: [ubuntu] => {"changed": true, "gid": 33, "group": "www-data", "mode": "0750", "owner": "www-data", "path": "/var/www/X", "size": 4096, "state": "directory", "uid": 33}

TASK [Supprimer package-lock.json s'il existe] **************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:128
changed: [ubuntu] => {"changed": true, "path": "/var/www/X/package-lock.json", "state": "absent"}

TASK [Créer un nouveau package-lock.json] *******************************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:133
changed: [ubuntu] => {"changed": true, "cmd": ["npm", "install", "--package-lock-only"], "delta": "0:00:01.219521", "end": "2026-02-09 11:51:26.526874", "msg": "", "rc": 0, "start": "2026-02-09 11:51:25.307353", "stderr": "", "stderr_lines": [], "stdout": "\nup to date, audited 404 packages in 1s\n\n61 packages are looking for funding\n  run `npm fund` for details\n\n1 moderate severity vulnerability\n\nTo address all issues, run:\n  npm audit fix\n\nRun `npm audit` for details.", "stdout_lines": ["", "up to date, audited 404 packages in 1s", "", "61 packages are looking for funding", "  run `npm fund` for details", "", "1 moderate severity vulnerability", "", "To address all issues, run:", "  npm audit fix", "", "Run `npm audit` for details."]}

TASK [Mettre à jour les paquets npm si node_modules existe] *************************************************************************************************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:145
[ERROR]: Task failed: Syntax error in expression: unexpected '='

Task failed.
Origin: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:145:7

143         npm_config_cache: "/home/www-data/.npm"
144
145     - name: Mettre à jour les paquets npm si node_modules existe
          ^ column 7

<<< caused by >>>

Syntax error in expression: unexpected '='
Origin: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:156:13

154         HOME: "/home/www-data"
155         npm_config_cache: "/home/www-data/.npm"
156       when: lookup('fileglob', symfony_root + '/node_modules/*', wantlist=True) | length > 0
                ^ column 13

fatal: [ubuntu]: FAILED! => {"changed": false, "msg": "Task failed: Syntax error in expression: unexpected '='"}

PLAY RECAP **************************************************************************************************************************************************************
ubuntu                     : ok=14   changed=8    unreachable=0    failed=1    skipped=1    rescued=0    ignored=0   

alexandre@alexandre-Matebook:~/Documents/X$ 

You introduced a syntax error:

    - name: Mettre à jour les paquets npm si node_modules existe
      command: npm update
      args:
        chdir: "{{ symfony_root }}"
      become: yes
      become_user: www-data
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
        HOME: "/home/www-data"
        npm_config_cache: "/home/www-data/.npm"
      when: lookup('fileglob', symfony_root + '/node_modules/*', wantlist=True) | length > 0

          === Correction des versions Symfony ===
TASK [Mettre à jour les paquets npm si node_modules existe] ********************************
task path: /home/alexandre/Documents/X/ansible/playbookQuatre.yml:145
[ERROR]: Task failed: Syntax error in expression: unexpected '='

ok, i’ve too a problem with indentation, my erreur was this :

instead of this :

- name: Mettre à jour les paquets npm si node_modules existe
      command: npm update
      args:
        chdir: "{{ symfony_root }}"
      become: yes
      become_user: www-data
      environment:
        NVM_DIR: "{{ nvm_dir }}"
        PATH: "{{ nvm_dir }}/versions/node/v{{ node_version }}/bin:{{ ansible_env.PATH }}"
        HOME: "/home/www-data"
        npm_config_cache: "/home/www-data/.npm"
       when: lookup('fileglob', symfony_root + '/node_modules/*', wantlist=True) | length > 0

At the last line who begin with when word