Cucumber-js: Les modifications apportées à la version 7.2.0 interrompent les rapporteurs externes

Créé le 21 avr. 2021  ·  4Commentaires  ·  Source: cucumber/cucumber-js

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 - Le module @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

  • @jbpros 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

  • @christian-bromann - @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

bug

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

Tous les 4 commentaires

@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 !

Cette page vous a été utile?
0 / 5 - 0 notes