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