Cucumber-js: Los cambios en 7.2.0 rompen a los reporteros externos

Creado en 21 abr. 2021  ·  4Comentarios  ·  Fuente: cucumber/cucumber-js

¡Hola @davidjgoss y @charlierudolph!

Parece que el soporte para ESM introducido en 7.2.0 (# 1589) rompe un número de reporteros externos, ya que ya no permite importaciones de submódulos.

Esto se manifiesta con un error en los proyectos que intentan importar un submódulo.

Por ejemplo, llamando a:

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

o:

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

resulta 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

Proyectos afectados que conozco (podría haber más):

  • Serenity / JS - El módulo @serenity-js/cucumber depende de las siguientes importaciones de submódulos:

    • @cucumber/cucumber/package.js (para leer la versión)

    • @cucumber/cucumber/lib/models/test_case_hook_definition - para instanciar TestCaseHookDefinition

  • @jbpros cucumber-pretty-formatter - vea jbpros / cucumber-pretty-formatter # 2, que se basa en la carga:

    • @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 , que carga:

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

¿Sería posible que Cucumber.js exportara las clases, tipos y funciones anteriores, por ejemplo, en el espacio reporters nombres

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

reporters.TestCaseHookDefinition

Alternativamente, ¿sería posible revertir esos cambios si la propuesta anterior requiere demasiado trabajo?

Gracias,
ene

bug

Comentario más útil

Bien, 7.2.1 está disponible con una reversión, profundizaré en lo de ESM y veré si hay alguna manera de evitar este problema. Gracias por criar a @ jan-molak

Todos 4 comentarios

@ jan-molak

Parece que el soporte para ESM introducido en 7.2.0 (# 1589) rompe un número de reporteros externos, ya que ya no permite importaciones de submódulos.

Solo para aclarar rápidamente, esto solo ocurre cuando se usa --esm , ¿verdad?

También había notado el problema con Pretty hoy, analizaré el impacto de expandir lo que exportamos en el punto de entrada principal. La mayoría parece razonable, pero debemos tener cuidado, ya que estamos agregando cosas nuevas al contrato de API que deshacer más adelante sería un cambio importante.

¡Hola @davidjgoss!

Solo para aclarar rápidamente, esto solo ocurre cuando se usa --esm, ¿verdad?

No, el problema ocurre siempre que un proyecto externo intenta importar cualquier submódulo desde @cucumber/cucumber .

He reproducido el problema aquí: 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

Ver error:

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

Bien, 7.2.1 está disponible con una reversión, profundizaré en lo de ESM y veré si hay alguna manera de evitar este problema. Gracias por criar a @ jan-molak

¡Gracias por responder tan rápido, @davidjgoss!

¿Fue útil esta página
0 / 5 - 0 calificaciones