Cucumber-js: Изменения в 7.2.0 нарушают работу внешних репортеров

Созданный на 21 апр. 2021  ·  4Комментарии  ·  Источник: cucumber/cucumber-js

Привет, @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 - модуль @serenity-js/cucumber использует следующие импортированные подмодули:

    • @cucumber/cucumber/package.js (чтобы прочитать версию)

    • @cucumber/cucumber/lib/models/test_case_hook_definition - для создания экземпляра TestCaseHookDefinition

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

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

В качестве альтернативы, можно ли было бы отменить эти изменения, если вышеуказанное предложение потребует слишком много работы?

Спасибо,
Янв

Самый полезный комментарий

Хорошо, 7.2.1 вышла с откатом, я вернусь к ESM и посмотрю, есть ли способ избежать этой проблемы. Спасибо за поднятие @ jan-molak

Все 4 Комментарий

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги