пакет react-native определяет основной модуль https-модуля

#javascript #android #node.js #react-native #npm

#javascript #Android #node.js #react-native #npm

Вопрос:

Я создал тестовый проект, пытаясь включить только https. Я использовал expo init test для инициализации проекта, а затем npm install https для установки библиотеки.

Затем я отредактировал App.js и включил эту строку в самый верх: import {https} from 'https';

Наконец expo start , для запуска сервера expo.

Теперь я получаю следующую ошибку:

 InternalError Metro has encountered an error: While trying to resolve module `https` from file `/path/test/App.js`, the package `/path/test/node_modules/https/package.json` was successfully found. However, this package itself specifies a `main` module field that could not be resolved (`/path/test/node_modules/https/index.js`. Indeed, none of these files exist:

  * /path/test/node_modules/https/index.js(.native|.android.expo.ts|.native.expo.ts|.expo.ts|.android.expo.tsx|.native.expo.tsx|.expo.tsx|.android.expo.js|.native.expo.js|.expo.js|.android.expo.jsx|.native.expo.jsx|.expo.jsx|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.wasm|.native.wasm|.wasm)
  * /path/test/node_modules/https/index.js/index(.native|.android.expo.ts|.native.expo.ts|.expo.ts|.android.expo.tsx|.native.expo.tsx|.expo.tsx|.android.expo.js|.native.expo.js|.expo.js|.android.expo.jsx|.native.expo.jsx|.expo.jsx|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json|.android.wasm|.native.wasm|.wasm)
  

Я проверил, что эти файлы действительно не существуют, вот вывод ls node_modules /https: package.json

Поэтому я предполагаю, что я сделал что-то не так во время процесса установки, однако я не могу понять, что именно. (Я также несколько раз пытался установить с помощью yarn add https , я получил ту же ошибку)

Комментарии:

1. Вы перезапустили metro после установки https библиотеки?

2. @MaksymBezruchko да.

3. Вы пытались импортировать его в качестве модуля по умолчанию: import https from 'https'; ?

4. @MaksymBezruchko да.

Ответ №1:

https Модуль, который вы хотите, почти наверняка Node.js встроенный https модуль и определенно не является шестилетним https модулем npm без документации или кода, а просто единственным файлом package.json. Этот пакет, вероятно, должен быть устаревшим, чтобы люди не совершали эту вполне понятную ошибку.

Короче говоря, попробуйте npm uninstall https и посмотрите, начнет ли ваш код работать. Вероятно, так и будет.

Если нет, и вам действительно нужен какой-то внешний модуль, это определенно не тот модуль. Посмотрите на один из многих замечательных модулей http / https. @Nitish предлагает axios в своем ответе, и это популярный и надежный выбор.

import {Agent} from 'https'; должен работать со встроенным https модулем, предполагая, что вы работаете с достаточно последней версией Node.js . (Вы можете быстро протестировать свою версию Node.js для этого нужно поместить эту строку кода в index.mjs файл и запустить node index.mjs . Если нет сообщения об ошибке, это сработало.)

Отказ от ответственности: Я ничего не знаю expo . Это все из Node.js / npm перспектива.

Комментарии:

1. Вы абсолютно правы, я не понимал, что это 2 отдельные вещи. Проблема в том, что я использую react native, а не стандартные nodejs, а react native не включает стандартные библиотеки node. Я уже использую axios, но, похоже, мне нужен https для передачи axios и https agent для разрешения запросов через самоподписанный ssl. Я буду продолжать искать другой способ настроить это.

2. @user12989668 Вы нашли решение? Не могли бы вы поделиться, пожалуйста?

Ответ №2:

ошибка очевидна, что в вашем package.json нет модуля https. Я не знаю, зачем вам нужен этот модуль, но если вам это нужно для REST API, я предлагаю fetch или, если вы можете использовать стороннюю версию, вы можете использовать axios.

Комментарии:

1. @b3nj4m1n Пожалуйста, дайте мне знать ваши требования.

2. Я использую axios, но мне нужно сделать запрос через ssl-соединение с самозаверяющим сертификатом (я не могу использовать бесплатный онлайн-центр сертификации), поэтому из того, что я прочитал в Интернете, мне нужно создать экземпляр axios и передать https. Агент с rejectUnauthorized имеет значение false. Если есть какой-либо другой способ сделать это, пожалуйста, дайте мне знать.

3. Я полагаю, вам следует задать другой вопрос по этому вопросу, в частности, упомянуть, что вы хотите сделать это в приложении react-native.