Vyhledávání na webu

typescript - problém s importem ESM modulu v NextJs/TS


Kódový písečný box

Migruji nějaký kód na NextJS 11/Webpack 5 a také některé moduly, které jsou nyní pouze ESM (celý ekosystém remark/unified).

Před upgradováním jsem byl schopen exportovat všechny soubory jako souhrn v index.ts ve složce, například:

export { default as MarkdownRenderer } from './markdownRenderer'

A v nadřazené složce s názvem „lib“ (za předpokladu, že výše uvedené je ve složce s názvem elements);

export * from './elements'

Pak v mém kódu mohu udělat:

import { MarkdownRenderer } from '../lib'

Toto již nefunguje a selhává s:

Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. 

Po nějakých pokusech vidím, že nemohu importovat/exportovat index souhrnu prvků - musím přidat všechny komponenty/soubory přímo do indexu knihovny takto:

// Not workie
//export * from './elements'

// Workie
export { default as MarkdownRenderer } from './elements/markdownRenderer'

Povolil jsem příznak esm pro NextJS a také experimentoval s next-transpile-modules, ale bez úspěchu.

V uvedeném sandboxu se podívejte na src/lib/index.ts a změňte komentáře, abyste viděli, jak to funguje/nefunguje.

Jak si zachovat možnost spravovat své souhrnné soubory na úrovni jednotlivých složek? Myslím, že je to problém s webpackem, ale nejsem si úplně jistý. Typescript si určitě během vývoje nijak nestěžuje.

Všimněte si, že to zdá se funguje se starší verzí Node (ať už byla výchozí na CodeSandbox - možná 10), ale na 14/16 to nefunguje.

Odpověď č. 1

Takže řešení prozatím je upravit konfiguraci webpacku v NextJS:

config.optimization.providedExports = true

Odpověď laskavě poskytnutá autorem webpacku.