Cucumber-js: 7.2.0での変更は、外部レポーターを壊します

作成日 2021年04月21日  ·  4コメント  ·  ソース: cucumber/cucumber-js

ねえ@davidjgossと@charlierudolph!

7.2.0 (#1589)で導入されたESMのサポートは、サブモジュールのインポートを許可しなくなったため、多くの外部レポーターを壊しているようです。

これは、サブモジュールのインポートを試みるプロジェクトでエラーとして現れます。

たとえば、次のいずれかを呼び出します。

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 - getGherkinExampleRuleMapgetGherkinScenarioMapgetGherkinStepMap

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

あるいは、上記の提案があまりにも多くの作業を必要とする場合、それらの変更を元に戻すことは可能でしょうか?

ありがとう、
1月

bug

最も参考になるコメント

さて、7.2.1は元に戻されました。ESMのことを掘り下げて、この問題を回避する方法があるかどうかを確認します。 @ jan-molakを育ててくれてありがとう

全てのコメント4件

@ jan-molak

7.2.0(#1589)で導入されたESMのサポートは、サブモジュールのインポートを許可しなくなったため、多くの外部レポーターを壊しているようです。

簡単に説明すると、これは--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 評価