Cucumber-js: Perubahan pada 7.2.0 menghancurkan reporter eksternal

Dibuat pada 21 Apr 2021  ·  4Komentar  ·  Sumber: cucumber/cucumber-js

Hai @davidjgoss dan @charlierudolph!

Sepertinya dukungan untuk ESM yang diperkenalkan di 7.2.0 (#1589) merusak sejumlah reporter eksternal, karena tidak lagi mengizinkan impor sub-modul.

Ini memanifestasikan dirinya dengan kesalahan dalam proyek yang mencoba impor sub-modul.

Misalnya, memanggil:

const TestCaseHookDefinition = require('@cucumber/cucumber/lib/models/test_case_hook_definition')

atau:

import TestCaseHookDefinition from '@cucumber/cucumber/lib/models/test_case_hook_definition';

menghasilkan:

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

Proyek yang terpengaruh yang saya ketahui (mungkin ada lebih banyak):

  • Serenity/JS - modul @serenity-js/cucumber bergantung pada impor sub-modul berikut:

    • @cucumber/cucumber/package.js (untuk membaca versi)

    • @cucumber/cucumber/lib/models/test_case_hook_definition - untuk membuat instance TestCaseHookDefinition

  • @jbpros cucumber-pretty-formatter - lihat jbpros/cucumber-pretty-formatter#2, yang bergantung pada pemuatan:

    • @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 , yang memuat:

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

Mungkinkah Cucumber.js mengekspor kelas, tipe, dan fungsi di atas, misalnya di bawah reporters namespace (atau yang serupa sehingga tidak menghalangi pengguna biasa):

import { reporters } from '@cucumber/cucumber';

reporters.TestCaseHookDefinition

Atau, apakah mungkin untuk mengembalikan perubahan tersebut jika proposal di atas membutuhkan terlalu banyak pekerjaan?

Terima kasih,
Jan

bug

Komentar yang paling membantu

Oke, 7.2.1 keluar dengan pengembalian, saya akan menggali kembali hal ESM dan melihat apakah ada cara kita dapat menghindari masalah ini. Terima kasih telah membesarkan @jan-molak

Semua 4 komentar

@jan-molak

Sepertinya dukungan untuk ESM yang diperkenalkan pada 7.2.0 (#1589) mematahkan sejumlah reporter eksternal, karena tidak lagi memungkinkan impor sub-modul.

Hanya untuk memperjelas, ini hanya terjadi saat menggunakan --esm , bukan?

Saya telah memperhatikan masalah dengan cukup baik hari ini, saya akan melihat dampak dari memperluas apa yang kami ekspor pada titik masuk utama. Sebagian besar terlihat masuk akal tetapi kami harus berhati-hati karena kami secara efektif menambahkan hal-hal baru ke kontrak API yang membatalkannya nanti akan menjadi perubahan yang melanggar.

Hai @davidjgoss!

Hanya untuk memperjelas, ini hanya terjadi saat menggunakan --esm, bukan?

Tidak, masalah terjadi setiap kali proyek eksternal mencoba mengimpor sub-modul apa pun dari @cucumber/cucumber .

Saya telah mereproduksi masalah di sini - 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

Lihat kesalahan:

> [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)

Oke, 7.2.1 keluar dengan pengembalian, saya akan menggali kembali hal ESM dan melihat apakah ada cara kita dapat menghindari masalah ini. Terima kasih telah membesarkan @jan-molak

Terima kasih telah merespons dengan sangat cepat, @davidjgoss!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat