1.报错背景
出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响.
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:71:19)
at Object.createHash (node:crypto:133:10)
at module.exports (D:\06_code\vscode\shopping-system\node_modules\webpack\lib\util\createHash.js:135:53)
at NormalModule._initBuildHash (D:\06_code\vscode\shopping-system\node_modules\webpack\lib\NormalModule.js:417:16)
at handleParseError (D:\06_code\vscode\shopping-system\node_modules\webpack\lib\NormalModule.js:471:10)
at D:\06_code\vscode\shopping-system\node_modules\webpack\lib\NormalModule.js:503:5
at D:\06_code\vscode\shopping-system\node_modules\webpack\lib\NormalModule.js:358:12
at D:\06_code\vscode\shopping-system\node_modules\loader-runner\lib\LoaderRunner.js:373:3
at iterateNormalLoaders (D:\06_code\vscode\shopping-system\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
at Array.<anonymous> (D:\06_code\vscode\shopping-system\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
at Storage.finished (D:\06_code\vscode\shopping-system\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
at D:\06_code\vscode\shopping-system\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9
at D:\06_code\vscode\shopping-system\node_modules\graceful-fs\graceful-fs.js:123:16
at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
2.报错原因
根据报错信息,这个问题涉及到项目启动时的构建过程中的一个模块。报错中提到了 babel-loader 和 webpack 相关的文件。应该是下载的版本和依赖的版本不一致。
要解决这个问题,可以尝试以下几个步骤:
1.更新依赖项:运行以下命令更新项目的依赖项,以确保使用的是最新版本的 babel-loader 和 webpack:npm update
2.清除缓存:运行以下命令清除 npm 缓存:npm cache clean --force
3.删除 node_modules 目录:运行以下命令删除项目的 node_modules 目录:rm -rf node_modules。重新安装依赖项:运行以下命令重新安装项目的依赖项:npm install
4.方法1.打开终端(按健win+R弹出窗口,键盘输入cmd,然后敲回车)并按照说明粘贴这些:(不一定行,本人失败了)
Linux & Mac OS (windows git bash)
export NODE_OPTIONS=--openssl-legacy-provider
windows命令提示符:
set NODE_OPTIONS=--openssl-legacy-provider
5.检查 Node.js 版本:确保你使用的是与项目兼容的 Node.js 版本。根据报错信息,你使用的是 Node.js v18.16.0,可以尝试降级到一个稳定的版本(例如 v14.x.x 或 v16.x.x)
3.问题解决
我最后将 Node.js版本从Node.js v18.16.0 降到14.17.0后OK啦,应该降到16版本也能行。
具体的安装可以参考下面文章
注意:NVM的安装目录不能有空格和中文、所以默认的安装目录Program File不行的、需要自己更改。