Cucumber-js: التغييرات في 7.2.0 تفصل المراسلين الخارجيين

تم إنشاؤها على ٢١ أبريل ٢٠٢١  ·  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

بدلاً من ذلك ، هل من الممكن التراجع عن هذه التغييرات إذا كان الاقتراح أعلاه يتطلب الكثير من العمل؟

شكرا،
يناير

bug

التعليق الأكثر فائدة

حسنًا ، تم إصدار 7.2.1 مع عودة ، وسأبحث مرة أخرى في شيء ESM وأرى ما إذا كانت هناك طريقة يمكننا من خلالها تجنب هذه المشكلة. شكرا لرفع @ jan-molak

ال 4 كومينتر

@ jan-molak

يبدو أن دعم ESM الذي تم تقديمه في 7.2.0 (# 1589) يكسر عددًا من المراسلين الخارجيين ، لأنه لم يعد يسمح باستيراد الوحدات الفرعية.

فقط للتوضيح بسرعة ، يحدث هذا فقط عند استخدام --esm ، أليس كذلك؟

لقد لاحظت المشكلة أيضًا اليوم ، وسأبحث في تأثير توسيع ما نصدره على نقطة الدخول الرئيسية. يبدو معظمها منطقيًا ولكننا سنحتاج إلى توخي الحذر لأننا نضيف أشياء جديدة بشكل فعال إلى عقد واجهة برمجة التطبيقات والذي سيكون التراجع عنه لاحقًا بمثابة تغيير جذري.

مرحبا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 التقييمات