Salut @davidjgoss et @charlierudolph !
Il semble que la prise en charge d'ESM introduite dans 7.2.0
(#1589) casse un certain nombre de rapporteurs externes, car elle ne permet plus les importations de sous-modules.
Cela se manifeste par une erreur dans les projets qui tentent une importation de sous-module.
Par exemple, en appelant soit :
const TestCaseHookDefinition = require('@cucumber/cucumber/lib/models/test_case_hook_definition')
ou alors:
import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';
résulte en:
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/models/test_case_hook_definition'
is not defined by "exports" in /path/to/project/node_modules/@cucumber/cucumber/package.json
Projets concernés que je connais (il pourrait y en avoir d'autres) :
@serenity-js/cucumber
repose sur les importations de sous-modules suivantes :@cucumber/cucumber/package.js
(pour lire la version)@cucumber/cucumber/lib/models/test_case_hook_definition
- pour instancier TestCaseHookDefinition
cucumber-pretty-formatter
- voir jbpros/cucumber-pretty-formatter#2, qui repose sur le chargement :@cucumber/cucumber/lib/formatter
- IFormatterOptions
@cucumber/cucumber/lib/formatter/helpers
- formatLocation
@cucumber/cucumber/lib/formatter/helpers/gherkin_document_parser
- getGherkinExampleRuleMap
, getGherkinScenarioMap
, getGherkinStepMap
@cucumber/cucumber/lib/formatter/helpers/pickle_parser
- getPickleStepMap
@wdio/cucumber-framework
, qui charge :@cucumber/cucumber/lib/support_code_library_builder/types
- ITestCaseHookParameter
@cucumber/cucumber/lib/formatter/helpers/event_data_collector
- EventDataCollector
@cucumber/cucumber/lib/support_code_library_builder/types
- ITestCaseHookParameter
@cucumber/cucumber/lib/runtime
- IRuntimeOptions
Serait-il possible pour Cucumber.js d'exporter les classes, types et fonctions ci-dessus, par exemple sous l'espace reporters
noms
import { reporters } from '@cucumber/cucumber';
reporters.TestCaseHookDefinition
Sinon, serait-il possible d'annuler ces modifications si la proposition ci-dessus nécessite trop de travail ?
Merci,
Jan
@jan-molak
Il semble que la prise en charge d'ESM introduite dans 7.2.0 (#1589) casse un certain nombre de rapporteurs externes, car elle ne permet plus les importations de sous-modules.
Juste pour clarifier rapidement, cela ne se produit que lors de l'utilisation de --esm
, n'est-ce pas ?
J'avais remarqué le problème avec Pretty aussi aujourd'hui, je vais regarder l'impact de l'expansion de ce que nous exportons sur le point d'entrée principal. La plupart semblent raisonnables, mais nous devrons être prudents car nous ajoutons effectivement de nouvelles choses au contrat d'API, ce qui serait un changement décisif.
Salut @davidjgoss !
Juste pour clarifier rapidement, cela ne se produit que lors de l'utilisation de --esm, n'est-ce pas ?
Non, le problème se produit chaque fois qu'un projet externe essaie d'importer un sous-module de @cucumber/cucumber
.
J'ai reproduit le problème ici - https://github.com/jan-molak/cucumber-js-1646
git clone https://github.com/jan-molak/cucumber-js-1646.git
cd cucumber-js-1646
npm install
npm start
Voir erreur :
> [email protected] start /path/to/jan-molak/cucumber-js-1646
> node index.js
internal/modules/cjs/loader.js:438
throw e;
^
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath './lib/models/test_case_hook_definition' is not defined by "exports" in /path/to/jan-molak/cucumber-js-1646/node_modules/@cucumber/cucumber/package.json
at throwExportsNotFound (internal/modules/esm/resolve.js:290:9)
at packageExportsResolve (internal/modules/esm/resolve.js:513:3)
at resolveExports (internal/modules/cjs/loader.js:432:36)
at Function.Module._findPath (internal/modules/cjs/loader.js:472:31)
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:867:27)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/path/to/jan-molak/cucumber-js-1646/index.js:1:32)
D'accord, 7.2.1 est sorti avec un retour, je vais creuser dans l'ESM et voir s'il y a un moyen d'éviter ce problème. Merci d'avoir élevé @jan-molak
Merci d'avoir répondu si rapidement, @davidjgoss !
Commentaire le plus utile
D'accord, 7.2.1 est sorti avec un retour, je vais creuser dans l'ESM et voir s'il y a un moyen d'éviter ce problème. Merci d'avoir élevé @jan-molak