web-dev-qa-db-fra.com

Webpack échoue soudainement à se compiler en raison des erreurs "Module non trouvé: Erreur: Impossible de résoudre"

Depuis hier après-midi, notre suite de tests unitaires Javascript a commencé à échouer. Aucun des tests ne s'exécute et Webpack ne signale un échec de construction après une chaîne d'erreurs Module non trouvé. Voici notre pile de construction:

Nœud 6.11.5 (oui je sais, très ancien) Karma 1.7.1 Webpack 2.2.1 React 15.6.2

Nous exécutons nos tests unitaires en utilisant Karma. La plupart de la suite de tests implique React, nous utilisons donc Webpack pour tout construire. Pour ce faire, nous importons notre configuration webpack puis insérons diverses valeurs dans la configuration webpack Karma.

Construire les scripts directement à l'aide de Webpack fonctionne bien, mais lorsque nous essayons d'exécuter karma start nous obtenons beaucoup de ces erreurs:

ERROR in ./~/object.entries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/RequireObjectCoercible' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.entries'
 @ ./~/object.entries/implementation.js 3:29-79
 @ ./~/object.entries/index.js
 @ ./~/enzyme/build/Utils.js
 @ ./~/enzyme/build/ReactWrapper.js
 @ ./~/enzyme/build/index.js
 @ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx

ERROR in ./~/object.fromentries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/AddEntriesFromIterable' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.fromentries'
 @ ./~/object.fromentries/implementation.js 3:29-79
 @ ./~/object.fromentries/index.js
 @ ./~/enzyme-adapter-utils/build/Utils.js
 @ ./~/enzyme-adapter-utils/build/index.js
 @ ./~/enzyme-adapter-react-15/build/ReactFifteenAdapter.js
 @ ./~/enzyme-adapter-react-15/build/index.js
 @ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx

ERROR in ./~/object.fromentries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/CreateDataPropertyOrThrow' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.fromentries'
 @ ./~/object.fromentries/implementation.js 4:32-85
 @ ./~/object.fromentries/index.js
 @ ./~/enzyme-adapter-utils/build/Utils.js
 @ ./~/enzyme-adapter-utils/build/index.js
 @ ./~/enzyme-adapter-react-15/build/ReactFifteenAdapter.js
 @ ./~/enzyme-adapter-react-15/build/index.js
 @ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx

ERROR in ./~/object.fromentries/implementation.js
Module not found: Error: Can't resolve 'es-abstract/2019/Get' in '/jenkins/workspace/RFD/DCS/assets-build/build-js/node_modules/object.fromentries'
 @ ./~/object.fromentries/implementation.js 5:10-41
 @ ./~/object.fromentries/index.js
 @ ./~/enzyme-adapter-utils/build/Utils.js
 @ ./~/enzyme-adapter-utils/build/index.js
 @ ./~/enzyme-adapter-react-15/build/ReactFifteenAdapter.js
 @ ./~/enzyme-adapter-react-15/build/index.js
 @ ../sources/admin/js/pages/sponsored/organic_flyers/tests/DealerAddButton.spec.jsx

Tous ces problèmes semblent être liés à es-abstract, dont nous avons remarqué qu'il y avait une nouvelle version hier (1.17.0-next.1). C'est à peu près au moment où tout a commencé à échouer. Cela dit, le package semble avoir été téléchargé et installé correctement:

ubuntu@ip-172-17-108-178:/workspace/assets-build/build-js$ npm list es-abstract
[email protected] /workspace/assets-build/build-js
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ ├─┬ [email protected]
│ │ └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]  deduped
├─┬ [email protected]
│ ├─┬ [email protected]
│ │ ├─┬ [email protected]
│ │ │ └─┬ [email protected]
│ │ │   └── [email protected]  deduped
│ │ └─┬ [email protected]
│ │   └── [email protected]
│ └─┬ [email protected]
│   └── [email protected]
├─┬ [email protected]
│ └─┬ [email protected]
│   └── [email protected]
└─┬ [email protected]
  └── [email protected]

Et quand j'inspecte le node_modules répertoire manuellement Je peux voir tous les fichiers que je m'attendrais à voir, sur la base d'un examen rapide de l'es-abstract Github. Je ne peux pas comprendre pourquoi Webpack ne peut apparemment pas voir ces fichiers alors qu'ils sont installés au bon endroit. Je ne peux pas non plus comprendre pourquoi cela se briserait soudainement hier, à moins que quelque chose n'allait pas avec le paquet es-abstract. Mais si tel est le cas, personne n'a signalé de problème à aucun des projets concernés (qui incluent Enzyme et certains des shims ES) ou au projet es-abstract lui-même. En outre, en regardant les builds CI pour certains des projets concernés, ils semblent tous signaler des tests réussis.

Nous ne savons pas quoi faire. J'ai essayé d'effacer node_modules et npm install à partir de zéro, mise à niveau de Node vers la version 8 LTS, rétrogradation d'Enzyme et de l'adaptateur React pour essayer d'extraire une ancienne version d'es-abstract (qui ne fonctionne pas, leurs fichiers package.json demandent toujours ^1.17.0-next.1, ce qui n'a aucun sens pour moi étant donné que certaines de ces versions datent d'un an). Rien ne fonctionne.

4
wesley.fok

J'ai eu ce problème et je l'ai résolu en corrigeant les paramètres de résolution de mes modules dans Jest.

Avec l'état actuel des choses, mon package-lock comprend:

"array.prototype.find": {
  "version": "2.1.0",
  "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz",
  "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==",
  "requires": {
    "define-properties": "^1.1.3",
    "es-abstract": "^1.13.0"
  }
},

et

"array-includes": {
  "version": "3.1.0",
  "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz",
  "integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==",
  "dev": true,
  "requires": {
    "define-properties": "^1.1.3",
    "es-abstract": "^1.17.0-next.0"
  },
  "dependencies": {
    "es-abstract": {
      "version": "1.17.0-next.1",
      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz",

...

Cela m'a amené à installer es-abstract 1.16.3 dans mes node_modules racine et 1.17.0-next.1 en tant que sous-dépendance de array-includes (entre autres).

Après avoir changé ma configuration Jest moduleDirectories, j'ai fait de mes root node_modules le premier lieu de recherche. Voici ce que la documentation Jest dit à propos de cette option: Un tableau de noms de répertoires à rechercher récursivement up et La définition de cette option remplacera la valeur par défaut , qui se trouve être node_modules.

alors vérifiez votre configuration pour cette fonctionnalité:

1
Gabriel Ferrarini

J'ai créé un problème sur le référentiel github du mainteneur https://github.com/ljharb/es-abstract/issues/84#issuecomment-567422831

Puisque nous rencontrons exactement le même problème, nous sommes allés avec une idée qui a été décrite par un commentaire. Exécution de la version de développement webpack sous productionflag. Pour nous, toutes les entrées de source-map sont conservées et notre application de développement est entièrement débogable. Nous utilisons donc cela comme une solution de contournement.

Si cela se rompt à l'avenir, nous allons probablement bifurquer tous les référentiels associés à une dépendance de plage semver et l'héberger nous-mêmes pour nos dépôts hérités vraiment obsolètes.

0
noa-dev