node.js - Transformácia UMD modulov na ES moduly v RollupJS („Požadovaný modul X neposkytuje export s názvom ‚default‘“)


Momentálne mám projekt v TypeScripte, ktorý zahŕňa Ethers.js, ktorý zase zahŕňa bn.js.

Problém je

SyntaxError: Požadovaný modul './../../../bn.js/lib/bn.js' neposkytuje export s názvom 'default'

Zdá sa mi, že je to preto, že BN je vo formáte UMD (pozri na https://github.com/indutny/bn.js/blob/master/lib/bn.js#L1)

(function (module, exports) {
 'use strict';
 // Utils
 function assert (val, msg) {
   if (!val) throw new Error(msg || 'Assertion failed');
 }

a príslušná deklarácia .ts je

"use strict";

/**
 *  BigNumber
 *
 *  A wrapper around the BN.js object. We use the BN.js library
 *  because it is used by elliptic, so it is required regardless.
 *
 */

import _BN from "bn.js";
import BN = _BN.BN;

import { Bytes, Hexable, hexlify, isBytes, isHexString } from "@ethersproject/bytes";

import { Logger } from "@ethersproject/logger";
import { version } from "./_version";
const logger = new Logger(version);

Možno existuje niečo, čo by sa dalo urobiť pri importovaní (zdroji) alebo v Rollupe. Ťažko povedať!

Tu je snímka obrazovky chýb zostavenia (jedna varianta, v závislosti od toho, či sa zostavuje alebo spúšťa priamo)

Otázka: Existuje spôsob, ako tento formát pretransformovať na formát ESM v aplikačnom rollup pipeline?

Skúšal som použiť @rollup/plugin-commonjs a @rollup/plugin-node-resolve ako v

resolve({ browser: true, preferBuiltins: false }), commonjs()]

(alebo si pozrite celý projekt na https://github.com/veikkoeeva/erc1155sample/blob/main/web/rollup.config.js, chyba sa zobrazuje pri npm run test alebo npm run start (v konzolovom výpise)).

Doteraz sa mi to však nepodarilo rozlúštiť. Preto som sem prišiel, s otázkou, či je tu nejaký hlúpy problém, ktorý nevidím, alebo či ide o naozaj ťažšiu záležitosť.

Upraviť: naozaj, podľa https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module a možno menované exporty sú tu kľúčové...

Súvisiace články