Skip to content

Fleet-wide: npm install --legacy-peer-deps workaround needs root-cause fix #97

Description

@rubenvdlinde

Updated diagnosis (2026-05-23)

Reproduction on docudesk with npm install (no flags) shows two distinct peer-dep conflicts, not one:

Conflict 1: babel-loader@10 vs @nextcloud/webpack-vue-config@6 peer ^9.1.3

3 apps explicitly pin babel-loader@^10.1.1 in package.json (docudesk, pipelinq, larpingapp) to work around an upstream issue. But the installed @nextcloud/webpack-vue-config@6.0.1 declares babel-loader: ^9.1.3 as a peer → npm rejects.

Fix: bump @nextcloud/webpack-vue-config from ^6.0.1 to ^7.0.2. The 7.x line declares babel-loader: ^10.0.0 as peer, matching what we're pulling.

Cascade (peer-dep changes in v7 vs v6):

Dep v6 peer v7 peer
babel-loader ^9.1.3 ^10.0.0
css-loader ^6.8.1 ^7.1.1
node-polyfill-webpack-plugin 3.0.0 4.0.0
sass-loader ^13.3.2 ^16.0.2
style-loader ^3.3.3 ^4.0.0
webpack-cli ^5.1.4 ^6.0.1
webpack-dev-server ^4.15.1 ^5.0.2
vue-loader ^15.10.1 ^15.11.1 || ^17.4.2
vue ^2.7.16 ^2.7.16 || ^3.5.13

Each cascade dep needs to bump too. Manageable per-app but not 1-line per repo.

Conflict 2: TypeScript ESLint resolver chain

@nextcloud/eslint-config@8.4.1 → eslint-import-resolver-typescript@^3.6.1
  → eslint-plugin-import-x@4.16.2 (peerOptional)
    → @typescript-eslint/utils@8.59.4

CLASHES with @vue/eslint-config-typescript@^13.0.0 which wants a different version.

Independent of Conflict 1. Likely affects npm run lint in CI too (we've seen "eslint-plugin-import not found" fleet-wide).

Fix path (less obvious):

  • Either bump @vue/eslint-config-typescript to a version that aligns on the resolver chain
  • Or pin @typescript-eslint/utils resolution at root
  • Or move the eslint config into a shared upstream package (@conduction/nextcloud-vue ships ESLint preset?) so the version pinning happens once

Recommended action

Two separate tracked PRs per app, both small but careful:

  1. chore(deps): bump @nextcloud/webpack-vue-config 6 → 7 + cascade — per affected app (docudesk, pipelinq, larpingapp first; verify build still passes; then proceed across the rest of the fleet that ships v6)
  2. chore(lint): resolve typescript-eslint utils version clash — likely upstream in @conduction/nextcloud-vue if there's a shared eslint config there; otherwise per-app

After both ship across the fleet, npm install should work flag-free and npm run lint should pass without the eslint-plugin-import not found symptom.

Previous incorrect diagnosis

The original issue body said webpack-vue-config@6.0.1 (no @nextcloud/ namespace). That package doesn't exist; the correct package is @nextcloud/webpack-vue-config. Also the diagnosis omitted Conflict 2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions