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