#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.