create-react-app 与Node 18(甚至17)的兼容性不佳,

qfe3c7zg  于 5个月前  发布在  React
关注(0)|答案(7)|浏览(65)

描述bug
从Node 17开始,OpenSSL发生了变化,现在我们需要以遗留模式运行,这可能不是很好:

ERROR in ./src/style/img/bt_logo_white.svg
Module build failed (from ../node_modules/file-loader/dist/cjs.js):
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at getHashDigest (/Users/dorious/BT/athena-ui/node_modules/loader-utils/lib/getHashDigest.js:46:34)
    at /Users/dorious/BT/athena-ui/node_modules/loader-utils/lib/interpolateName.js:113:11
    at String.replace (<anonymous>)
    at interpolateName (/Users/dorious/BT/athena-ui/node_modules/loader-utils/lib/interpolateName.js:110:8)
    at Object.loader (/Users/dorious/BT/athena-ui/node_modules/file-loader/dist/index.js:29:48)

https://stackoverflow.com/a/73465262
大家说我们应该在webpack输出配置中更改hashFunction,显然这是不可能的。

kgsdhlau

kgsdhlau1#

如果你使用重接工具,如craco,你就可以做到。
不过这并不是理想的解决方案。这个问题应该在CRA的核心中得到修复。

busg9geu

busg9geu2#

你可以使用重置工具,如craco来实现。是的,我们不想使用craco。幸运的是,它开始与react-scripts 5一起工作。目前我们只使用遗留的openssl。

vmpqdwk3

vmpqdwk33#

你看到这个问题是因为Node.js 17或更高版本与OpenSSL 3.0一起发布,而默认情况下并未启用它。在Node.js 16中支持这个功能,该版本与OpenSSL 1.1.1一起发布。这被webpack 4及更早版本的webpack 5使用,直到5.61.0

你应该仔细检查你的react-scripts包中引入的webpack版本。如果你使用的是react-scripts 5.0.1,那么你应该不会遇到任何问题,因为它目前引入的是5.61.0+的webpack。这是从基于OpenSSL的MD4算法更新到基于WebAssembly的MD4实现的webpack版本。

qyswt5oh

qyswt5oh4#

我有一个5.73.0版本,但问题依然存在。所以这不是真的,或者还有其他情况发生。

o2g1uqev

o2g1uqev5#

对我来说也是一样。

qc6wkl3g

qc6wkl3g6#

我已经查看了这个帖子上建议的解决方案/替代方法。使用这个方法,你可以像这样安装缺失的polyfills:
它似乎在我目前的测试中有效,至少在本地是有效的。而且至关重要的是,它不需要更改Webpack配置,因此不需要Craco或其他类似的东西。

u4vypkhs

u4vypkhs7#

brownieboy 解决方案对我不起作用。
一年过去了——没有解决方案☹️
为什么它甚至为svg使用file-loader🤔

相关问题