Модуль не найден: ошибка: не удается разрешить «крипто» — ошибка реакции [решено]
Я делал проект в ReactJS, и мне нужно было установить модуль jsonwebtoken для части аутентификации. После установки jsonwebtoken я столкнулся с некоторыми проблемами, связанными с crypto и другими модулями библиотеки.
Ошибка была такой:-
Модуль не найден: ошибка: не удается разрешить «крипто» в «путь_вашего_проекта»/client/node_modules/jwa.
ГЛАВНОЕ ИЗМЕНЕНИЕ: webpack ‹ 5 по умолчанию включает полифиллы для основных модулей node.js. Это уже не так. Проверьте, нужен ли вам этот модуль, и настройте для него полифилл.
Если вы хотите включить полифилл, вам необходимо: - добавить резервную копию ‘resolve.fallback: { “crypto”: require.resolve(“crypto-browserify”)}’
- установить «crypto-browserify»
Если вы не хотите включать полифилл, вы можете использовать пустой модуль, например: resolve.fallback: { «crypto»: false }
Сообщение об ошибке указывает, что модуль «crypto» не найден в каталоге «‹your_path›\client\node_modules\jwa». В сообщении также предполагается, что эта проблема может быть связана с изменениями в веб-пакете версии 5, где полифиллы для основных модулей node.js больше не включены по умолчанию.
В более ранних версиях веб-пакета любые основные модули Node.js, которые были импортированы в код, автоматически включались в пакет, даже если код выполнялся в браузере. К ним относятся такие модули, как «crypto», «fs» и «path».
Но в версии 5 веб-пакета это поведение изменилось, и основные модули Node.js больше не включаются в пакет автоматически по умолчанию. Это означает, что если ваш код импортирует основной модуль Node.js, он не будет работать в браузере, если вы явно не включите полифилл для этого модуля.
Полифилл – это фрагмент кода, обеспечивающий функциональность определенной функции в средах, которые изначально не поддерживают ее. В этом случае, поскольку модуль crypto не поддерживается в браузере, crypto-browserify используется в качестве полифилла для обеспечения той же функциональности в браузере.
Таким образом, это изменение в веб-пакете означает, что разработчики должны быть более осведомлены о том, какие модули они импортируют в свой код, и убедиться, что эти модули доступны в браузере, либо путем предоставления полифилла, либо вообще избегая использования этого модуля.
Как мы уже говорили, crypto-browserify используется в качестве полифилла для обеспечения той же функциональности в браузере, мы можем решить эту проблему, установив crypto-browserify. Для этого: -
Сначала установите крипто-браузер
npm install crypto-browserify
Файл перехода к webpack.config.js, расположенный в node_modules/react-scripts/config/webpack.config.js
В строке 305: -
resolve: { fallback: { «crypto»: require.resolve («crypto-browserify») },
Метод «require.resolve» используется для поиска полного пути к файлу указанного модуля, поэтому в данном случае он загружает модуль «crypto-browserify» и находит путь к его файлу для использования в качестве полифилла. .
Вы также можете использовать пустой модуль,
resolve.fallback: { "crypto": false
означает, что модуль «crypto» не будет разрешен распознавателем веб-пакета. Это полезно, если вы хотите предотвратить включение модуля шифрования в ваш пакет и, таким образом, уменьшить размер вашего пакета.