无法将 jsonwebtoken 与最新版本的 React 一起使用

use*_*831 5 npm jwt reactjs

TL:DR: 替换jsonwebtokenjwt-decode

我在将现有的 React 应用程序升级到最新版本时遇到了一些麻烦。每次我都会收到以下错误

Can't resolve 'buffer' in '/home/user/projects/trash/tokentest/test/node_modules/buffer-equal-constant-time'

Can't resolve 'stream' in '/home/user/projects/trash/tokentest/test/node_modules/buffer-equal-constant-time'

Can't resolve 'util' in '/home/user/projects/trash/tokentest/test/node_modules/buffer-equal-constant-time'

Can't resolve 'crypto' in '/home/user/projects/trash/tokentest/test/node_modules/buffer-equal-constant-time'
Run Code Online (Sandbox Code Playgroud)

buffer stream我可以通过安装和软件包来摆脱除加密之外的所有这些util
我尝试安装cryptocrypto-browserify并且crypto-js

我确实发现我可以通过jsonwebtoken从项目中删除来使其工作。但此后它不再完全起作用,因为它需要用户身份验证。

为了进行测试,我创建了一个全新的 create-react-app 项目。它开箱即用。但是一旦我安装并导入jsonwebtoken,我就会再次遇到完全相同的错误。这意味着即使在完全干净的项目中也jsonwebtoken无法使用。

有没有办法来解决这个问题?因为我想升级我的项目并使用 jsonwebtoken。

小智 12

jsonwebtoken是一个 Node.js 模块,您之前在 React 应用程序中使用它依赖于 Node.js std 模块的 polyfill。这很可能是 a) 依赖于不再维护的慢速 js 加密技术,并且缺乏与 Node 加密技术相同的功能;b) 大大增加了 js 包的大小。更新 React 可能意味着更新 webpack,它不再默认使用有问题的加密填充。

最好依赖为浏览器或“通用”制作的模块,您可以在jwt.io上“JavaScript”下列出的模块中找到此类模块。在列出的 API 中,jose使用纯粹可用的 Web API。