Cucumber-js: Mudanças no 7.2.0 quebram repórteres externos

Criado em 21 abr. 2021  ·  4Comentários  ·  Fonte: cucumber/cucumber-js

Olá @davidjgoss e @charlierudolph!

Parece que o suporte para ESM introduzido em 7.2.0 (# 1589) quebra uma série de repórteres externos, pois não permite mais importações de submódulos.

Isso se manifesta com um erro em projetos que tentam uma importação de submódulo.

Por exemplo, chamando:

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

ou:

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

resulta em:

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

Projetos afetados de que tenho conhecimento (pode haver mais):

  • Serenity / JS - @serenity-js/cucumber módulo depende das seguintes importações de submódulo:

    • @cucumber/cucumber/package.js (para ler a versão)

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

  • @jbpros cucumber-pretty-formatter - veja jbpros / cucumber-pretty-formatter # 2, que depende do carregamento:

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

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

Seria possível para Cucumber.js exportar as classes, tipos e funções acima, por exemplo, sob reporters namespace (ou algo semelhante para que eles não atrapalhem os usuários regulares):

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

reporters.TestCaseHookDefinition

Alternativamente, seria possível reverter essas alterações se a proposta acima exigir muito trabalho?

Obrigado,
Jan

bug

Comentários muito úteis

Ok, 7.2.1 está com reversão, vou cavar de volta na coisa do ESM e ver se há uma maneira de evitar esse problema. Obrigado por criar @ jan-molak

Todos 4 comentários

@ jan-molak

Parece que o suporte para ESM introduzido em 7.2.0 (# 1589) quebra uma série de relatores externos, pois não permite mais importações de submódulos.

Só para esclarecer rapidamente, isso só ocorre ao usar --esm , certo?

Eu percebi o problema com o Pretty também hoje. Vou analisar o impacto da expansão do que exportamos no ponto de entrada principal. A maioria parece razoável, mas precisamos ter cuidado, pois estamos efetivamente adicionando coisas novas ao contrato de API que desfazer mais tarde seria uma alteração significativa.

Olá @davidjgoss!

Só para esclarecer rapidamente, isso só ocorre quando se usa --esm, certo?

Não, o problema ocorre sempre que um projeto externo tenta importar qualquer submódulo de @cucumber/cucumber .

Reproduzi o problema aqui - 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

Veja o erro:

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

Ok, 7.2.1 está com reversão, vou cavar de volta na coisa do ESM e ver se há uma maneira de evitar esse problema. Obrigado por criar @ jan-molak

Obrigado por responder tão rápido, @davidjgoss!

Esta página foi útil?
0 / 5 - 0 avaliações