Преобразование модулей UMD в модули ES в RollupJS («Запрошенный модуль X не предоставляет экспорт с именем»по умолчанию»»)

#node.js #typescript #rollupjs #umd

Вопрос:

В настоящее время у меня есть проект машинописи, который включает в себя Ethers.js, что, в свою очередь, включает bn.js.

Проблема в том, что

Синтаксическая ошибка: Запрошенный модуль ‘./../../../bn.js/lib/bn.js «не предоставляет экспорт с именем «по умолчанию»

Мне кажется, это связано с тем, что BN находится в формате UMD (см. на 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');
 }
 

и соответствующее .ts заявление является

 "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);
 

Возможно, есть что-то, что можно было бы сделать при импорте (исходный код) или в свертке. Трудно сказать!

Вот скриншот ошибок сборки (один из вариантов, в зависимости от того, выполняется ли сборка или запуск напрямую)

скриншот ошибок сборки

Вопрос: Есть ли способ преобразовать этот формат в формат ESM в конвейере свертки приложений?

Я пробовал использовать @rollup/plugin-commonjs и @rollup/plugin-node-resolve как в

разрешить({ браузер: истина, предпочтения: ложь }), commonjs()]

(или посмотрите проект в целом на https://github.com/veikkoeeva/erc1155sample/blob/main/web/rollup.config.js, ошибка отображается с npm run test или npm run start (в журнале консоли)).

Однако до сих пор мне не удавалось это разгадать. Поэтому я пришел сюда, задаваясь вопросом, есть ли глупая проблема, которую я не вижу, или это действительно более сложная проблема.

Edit: indeed, following https://rollupjs.org/guide/en/#error-name-is-not-exported-by-module and maybe named exports is the key here…