Привет, @davidjgoss и @charlierudolph!
Похоже, что поддержка ESM, представленная в 7.2.0
(# 1589), нарушает работу ряда внешних репортеров, поскольку больше не позволяет импортировать подмодули.
Это проявляется ошибкой в проектах, которые пытаются импортировать подмодуль.
Например, вызов:
const TestCaseHookDefinition = require('@cucumber/cucumber/lib/models/test_case_hook_definition')
или же:
import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';
приводит к:
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
Затронутые проекты, о которых я знаю (их может быть больше):
@serenity-js/cucumber
использует следующие импортированные подмодули:@cucumber/cucumber/package.js
(чтобы прочитать версию)@cucumber/cucumber/lib/models/test_case_hook_definition
- для создания экземпляра TestCaseHookDefinition
cucumber-pretty-formatter
- см. jbpros / cucumber-pretty-formatter # 2, который полагается на загрузку:@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
, который загружает:@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
Может ли Cucumber.js экспортировать указанные выше классы, типы и функции, например, в пространство имен reporters
(или что-то подобное, чтобы они не мешали обычным пользователям):
import { reporters } from '@cucumber/cucumber';
reporters.TestCaseHookDefinition
В качестве альтернативы, можно ли было бы отменить эти изменения, если вышеуказанное предложение потребует слишком много работы?
Спасибо,
Янв
@ jan-molak
Похоже, что поддержка ESM, представленная в 7.2.0 (# 1589), нарушает работу ряда внешних репортеров, поскольку больше не позволяет импортировать подмодули.
Чтобы быстро уточнить, это происходит только при использовании --esm
, верно?
Я заметил проблему с довольно сегодня, я посмотрю на влияние расширения того, что мы экспортируем, на основную точку входа. Большинство из них выглядит разумным, но нам нужно быть осторожными, поскольку мы эффективно добавляем новые вещи в контракт API, отмена которых позже будет критическим изменением.
Привет, @davidjgoss!
Чтобы быстро уточнить, это происходит только при использовании --esm, верно?
Нет, проблема возникает всякий раз, когда внешний проект пытается импортировать какой-либо подмодуль из @cucumber/cucumber
.
Я воспроизвел проблему здесь - 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
Смотрите ошибку:
> [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)
Хорошо, 7.2.1 вышла с откатом, я вернусь к ESM и посмотрю, есть ли способ избежать этой проблемы. Спасибо за поднятие @ jan-molak
Спасибо за быстрый ответ, @davidjgoss!
Самый полезный комментарий
Хорошо, 7.2.1 вышла с откатом, я вернусь к ESM и посмотрю, есть ли способ избежать этой проблемы. Спасибо за поднятие @ jan-molak