描述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,显然这是不可能的。
7条答案
按热度按时间kgsdhlau1#
如果你使用重接工具,如craco,你就可以做到。
不过这并不是理想的解决方案。这个问题应该在CRA的核心中得到修复。
busg9geu2#
你可以使用重置工具,如craco来实现。是的,我们不想使用craco。幸运的是,它开始与react-scripts 5一起工作。目前我们只使用遗留的openssl。
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版本。
qyswt5oh4#
我有一个5.73.0版本,但问题依然存在。所以这不是真的,或者还有其他情况发生。
o2g1uqev5#
对我来说也是一样。
qc6wkl3g6#
我已经查看了这个帖子上建议的解决方案/替代方法。使用这个方法,你可以像这样安装缺失的polyfills:
它似乎在我目前的测试中有效,至少在本地是有效的。而且至关重要的是,它不需要更改Webpack配置,因此不需要Craco或其他类似的东西。
u4vypkhs7#
brownieboy 解决方案对我不起作用。
一年过去了——没有解决方案☹️
为什么它甚至为svg使用file-loader🤔