javascript - 运行 npm start 一直显示错误
问题描述
每次我尝试在我的 windows powershell 上为我的 react 项目运行 npm start 时,它都会不断向我显示错误
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at module.exports (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\util\createHash.js:135:53)
at NormalModule._initBuildHash (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:417:16)
at handleParseError (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:471:10)
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:503:5
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:358:12
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:373:3
at iterateNormalLoaders (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
at iterateNormalLoaders (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\react-scripts\scripts\start.js:19
throw err;
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:67:19)
at Object.createHash (node:crypto:130:10)
at module.exports (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\util\createHash.js:135:53)
at NormalModule._initBuildHash (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:417:16)
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:452:10
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:323:13
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:367:11
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:233:18
at context.callback (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\babel-loader\lib\index.js:59:103 {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
还有那个原因是什么:“不受支持”是什么意思?
解决方案
如果您使用的是 Webpack(从他们的堆栈跟踪中看来 OP 正在使用它)和 Node 17,则存在一些兼容性问题。节点 17从 OpenSSL 1.1更改为 3.0,并且有一些破坏性更改导致 Webpack 中的错误。这个问题似乎有几个解决方案。
选项 1:更新 Webpack。
版本5.61.0修复了这个错误。这是最简单的解决方案。
如果您使用的是 Webpack 4,开发人员无意为此版本创建错误修复。您必须更新到版本 5 或使用下面的选项 3/4。
选项 2:更新webpack.config.js
.
对于webpack>=5.54
,您可以手动将散列算法更改为适用于 OpenSSL 3.0 的算法。
module.exports = {
output: {
hashFunction: 'xxhash64'
}
}
选项 3:降级节点。
更改为 Node 的 LTS 版本(当前为 16.x)应该可以解决这个问题。但是,这并不能解决问题,只会拖延问题。
选项 4:改变NODE_OPTIONS
对于带有 Node 17 的任何版本的 Webpack,您可以设置一个标志以恢复到旧的 OpenSSL API。这并不理想,但它有效。
# Works in *nix shells
NODE_OPTIONS='--openssl-legacy-provider' npm start
# ============================
# or (cross-platform solution)
# ============================
# requires installing `cross-env`
npm install -D cross-env
# then...
cross-env NODE_OPTIONS='--openssl-legacy-provider' npm start
推荐阅读
- python - 熊猫:两列的累积计数
- php - 如何使用php在动态列表中添加静态li?
- android - 控件在 android studio 的 .xml 文件中不可见,尽管添加了它们
- python - 使用 shutil.copyfiles 时获取“PermissionError:[错误 13] 权限被拒绝
- python-3.x - 如何在 Python 中循环读取多个文件并获取匹配单词的计数
- sirikit - SiriKit 意图定义文件未创建
- javascript - 将文件上传到驱动器 - 设置新文件夹 ID 问题
- android - android.os.BadParcelableException: Parcelable 协议需要一个 Parcelable.Creator 对象,在类上称为 CREATOR
- android - Firebase 错误转换为对象无法将 java.lang.Boolean 类型的对象转换为类型
- reactjs - 使用 typescript 3.0.1 项目引用时找不到类型定义