Cucumber-js: Änderungen in 7.2.0 brechen externe Reporter

Erstellt am 21. Apr. 2021  ·  4Kommentare  ·  Quelle: cucumber/cucumber-js

Hey @davidjgoss und @charlierudolph!

Es sieht so aus, als ob die Unterstützung für ESM, die in 7.2.0 (#1589) eingeführt wurde, eine Reihe externer Reporter unterbricht, da sie keine Submodul-Importe mehr zulässt.

Dies äußert sich durch einen Fehler in Projekten, die einen Submodulimport versuchen.

Rufen Sie beispielsweise entweder Folgendes auf:

const TestCaseHookDefinition = require('@cucumber/cucumber/lib/models/test_case_hook_definition')

oder:

import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';

ergibt:

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

Betroffene Projekte, die mir bekannt sind (es könnten mehr sein):

  • Serenity/JS - @serenity-js/cucumber Modul basiert auf folgenden Submodul-Importen:

    • @cucumber/cucumber/package.js (um die Version zu lesen)

    • @cucumber/cucumber/lib/models/test_case_hook_definition - zum Instanziieren von TestCaseHookDefinition

  • @jbpros cucumber-pretty-formatter - siehe jbpros/cucumber-pretty-formatter#2, das auf das Laden angewiesen ist:

    • @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 , das lädt:

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

Wäre es Cucumber.js möglich, die oben genannten Klassen, Typen und Funktionen zu exportieren, zum Beispiel unter reporters Namespace (oder etwas ähnliches, damit sie normalen Benutzern nicht in die Quere kommen):

import { reporters } from '@cucumber/cucumber';

reporters.TestCaseHookDefinition

Wäre es alternativ möglich, diese Änderungen rückgängig zu machen, wenn der obige Vorschlag zu viel Arbeit erfordert?

Vielen Dank,
Jan

bug

Hilfreichster Kommentar

Okay, 7.2.1 ist mit einem Revert raus, ich werde mich wieder mit der ESM-Sache befassen und sehen, ob es eine Möglichkeit gibt, dieses Problem zu vermeiden. Danke, dass du @jan-molak großgezogen hast

Alle 4 Kommentare

@jan-molak

Es sieht so aus, als ob die in 7.2.0 (#1589) eingeführte Unterstützung für ESM eine Reihe externer Reporter unterbricht, da sie keine Submodul-Importe mehr zulässt.

Nur um es schnell zu verdeutlichen, dies tritt nur auf, wenn --esm , oder?

Ich hatte das Problem mit ziemlich heute auch bemerkt, ich werde mir die Auswirkungen der Erweiterung dessen, was wir exportieren, auf den Haupteinstiegspunkt ansehen. Die meisten sehen vernünftig aus, aber wir müssen vorsichtig sein, da wir dem API-Vertrag effektiv neue Dinge hinzufügen, die später rückgängig gemacht werden können.

Hallo @davidjgoss!

Nur um es schnell zu verdeutlichen, dies tritt nur bei Verwendung von --esm auf, oder?

Nein, das Problem tritt immer dann auf, wenn ein externes Projekt versucht, ein Untermodul von @cucumber/cucumber zu importieren.

Ich habe das Problem hier reproduziert - 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

Siehe Fehler:

> [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)

Okay, 7.2.1 ist mit einem Revert raus, ich werde mich wieder mit der ESM-Sache befassen und sehen, ob es eine Möglichkeit gibt, dieses Problem zu vermeiden. Danke, dass du @jan-molak großgezogen hast

Danke, dass du so schnell geantwortet hast, @davidjgoss!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen