Когда вы импортируете cross-fetch
в React Native, упаковщик модуля React Native выбирает node_modules/cross-fetch/dist/browser-ponyfill.js
в соответствии с полем browser
в node_modules/cross-fetch/package.json
;Я считаю, что это настроено здесь .И node_modules/cross-fetch/dist/browser-ponyfill.js
предоставляет только экспортное назначение, а не экспорт по умолчанию:
if (typeof module === 'object' && module.exports) {
module.exports = fetch;
}
Контраст с node_modules/cross-fetch/dist/node-ponyfill.js
, который имеет как экспортное назначение, так и экспорт по умолчанию:
module.exports = exports = fetch;
exports.fetch = fetch;
exports.Headers = nodeFetch.Headers;
exports.Request = nodeFetch.Request;
exports.Response = nodeFetch.Response;
// Needed for TypeScript.
exports.default = fetch;
Включение опции компилятора esModuleInterop
в вашем проекте приведет к тому, что TypeScript исправит разницу и выполнит импорт по умолчанию, используя назначение экспорта.Однако, поскольку node-ponyfill.js
ясно предполагает, что авторы cross-fetch
намеревались поддерживать потребителей, использующих TypeScript без esModuleInterop
, я бы сказал, что им следует исправить browser-ponyfill.js
для работы в том же сценарии.Я вижу, вы уже подали вопрос .