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