Error message "error:0308010C:digital envelope routines::unsupported"
Error message "error:0308010C:digital envelope routines::unsupported"
我创建了默认的 IntelliJ IDEA React 项目并得到了这个:
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 (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:471:10)
at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:503:5
at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:358:12
at /Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
/Users/user/Programming Documents/WebServer/untitled/node_modules/react-scripts/scripts/start.js:19
throw err;
^
这似乎是最近的问题 - webpack ran into this 4 days ago and is still working on it.
Failed to construct transformer: Error: error:0308010C:digital envelope routines::unsupported
解决上述错误最简单易行的方法是将 Node.js 降级到 v14.18.1。然后只需删除文件夹 node_modules
并尝试重建您的项目,您的错误必须得到解决。
现在有两个选项-
1.尝试卸载 Node.js 版本 17+ 并重新安装 Node.js 版本 16+
您可以从他们的 official site. or more specific downloads from here;
重新安装当前的 LTS node js 版本
您可以使用 NVM(节点版本管理器)
- Linux 和 Mac 用户可以使用这个 nvm 包 - https://github.com/nvm-sh/nvm
- Windows 用户可以使用这个 nvm 包 - https://github.com/coreybutler/nvm-windows
2。打开终端并按照说明粘贴这些内容:
Linux & Mac OS (windows git bash)-
export NODE_OPTIONS=--openssl-legacy-provider
Windows命令提示符-
set NODE_OPTIONS=--openssl-legacy-provider
引用link.
在您的 package.json 中:更改此行
"start": "react-scripts start"
至
"start": "react-scripts --openssl-legacy-provider start"
如果我们使用 Node.js 的当前 LTS 版本,则不会出现此错误。将您的 Node.js 版本降级到当前的 LTS 版本 (16.13.0)。
可以通过多种方式安装所需的版本。其中之一是使用 nvm(Node.js 版本管理器)。
第一步:安装nvm(如果没有安装,按照Install Node.js Locally with Node Version Manager (nvm))
第 2 步:nvm install 16.13.0
(或 lts)
我在 Docker 构建中遇到了这个问题,我在 Docker 文件中添加了这一行:
RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build && yarn install --production --ignore-scripts --prefer-offline
对于本地开发,在文件package.json.
中添加开关
这是 Node.js 版本。
我在 Node.js 17 上遇到了这个错误,但是当我使用 nvm
.
将我的 Node.js 版本切换到旧版本 (16) 时,一切正常
尝试:
npm create react-app --template typescript foo --use-npm
如果您遇到此错误并且不想更改主要配置,则可以使用以下方法轻松解决。不过,我不确定是否建议将其作为一种好的做法。
欢迎指正。
最初,假设这是我的 package.json
文件的脚本部分:
...
"version": "1.0.0",
"scripts": {
...
"build": "npm run build:test-app:testing",
"build:test-app:testing": "ng build test-app --deploy-url https://test-app.com/ --configuration=test-config",
...
},
"private": true,
...
要使用此 export NODE_OPTIONS=--openssl-legacy-provider
您可以执行以下操作:
"version": "1.0.0",
"scripts": {
....
"build": "NODE_OPTIONS=--openssl-legacy-provider npm run build:test-app:testing”,
"build:test-app:testing": "NODE_OPTIONS=--openssl-legacy-provider ng build test-app --deploy-url https://test-app.com/ --configuration=test-config"
...
},
"private": true,
记下构建脚本。我添加了一个选项:NODE_OPTIONS=--openssl-legacy-provider
这有助于解决 Node.js 版本 17 中的错误。
对于那些可以灵活更改构建系统 Node.js 版本的用户,只需切换到低于 17 的版本,例如版本 16。
对于Docker,最初使用这个的用例,始终拉取最新版本:
...
FROM node:alpine
...
您可以切换到类似的内容:
...
FROM node:16-alpine3.12
...
我在 GitHub 上找到了以下命令:
对于Windows,在cmd中使用以下命令:
set NODE_OPTIONS=--openssl-legacy-provider
对于 Unix,使用:
export NODE_OPTIONS=--openssl-legacy-provider
我在使用 Node.js 17.0.1 时遇到了同样的问题。我按照以下步骤解决了它:
打开控制面板→程序和功能→Node.js 并通过右键单击 a
卸载 Node.js
前往网站https://nodejs.org/en/下载版本并安装。
这个解决方案对我有用。
此错误出现在 Node.js 版本 17+ 中,因此请尝试降级 Node.js 版本。
- 从计算机中卸载 Node.js。
- 下载 Node.js 版本 16 并从 https://nodejs.org/download/release/v16.13.0/
重新安装
就这些了。
这对我有用(从 Node.js 17 降级到 Node.js 16):
nvm install --lts
nvm use --lts
在 Dockerfile 上你应该添加:
ENV NODE_OPTIONS=--openssl-legacy-provider
并为大多数用户下载推荐版本。
然后从您的 PC 上卸载 Node.js 并安装 推荐的 版本。
据我了解,这是开发团队的问题。他们会尽快修复它,但同时使用推荐的版本,一切都会好的。
部分热门答案无效。
export NODE_OPTIONS=--openssl-legacy-provider
一些热门答案不适用,正在修改 package.json
文件:
"start": "react-scripts --openssl-legacy-provider start"
这是由 OpenSSL
的最新 node.js V17
兼容问题引起的,请参阅 GitHub 上的 this and this 问题。
最简单的事情就是从 node.js V17
降级到 node.js V16
。请参阅 了解如何降级 node.js
。
我今天遇到了这个问题,并通过使用“nvm”切换 Node.js 版本解决了这个问题。
我一直在使用 Node.js、Next.js, and React 进行几个个人项目...我经常遇到的情况是我不记得 [=19 的确切版本=] 我用在哪个项目上。
所以通常我会尝试将 Node.js 16 用于当前使用 Node.js 14 的项目(我目前使用 Node.js 17)。
我还没有找到更好的方法来记住每个项目的 Node.js 版本,所以我通常只保存 运行 启动应用程序所需的所有命令readme.MD.
在终端 (OS X) 中,只需像这样降级:
sudo n 16.13.0
这在我的应用程序博览会中对我有用(从 Node.js 17 降级到 Node.js 12 或 14)。
如果你安装了 nvm,你可以更改节点的版本:
首先检查 nvm 中 Node.js 的版本:
nvm list
其次,安装12或14版:
nvm install v12.22.8
检查
node -v
v17.4.0
然后回滚到 node --lts (node v16.13.2 (npm v8.1.2)) 使用 nvm
对于 bash shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
对于 zsh shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh
安装 nvm 之后
nvm install --lts
检查
node -v
v16.13.2
重试
在Angular.io项目中,Nodes.js的接受(不受支持)版本是v16.x.x.
在Nodes v17.x版本中,出现与本题描述相同的错误。
解法:
卸载节点并重新安装版本v16.x(对于Windows)。
已使用 lts
修复
echo "lts" > .nvmrc
nvm install
如果您使用的是 react-scripts
,您现在只需升级到似乎已解决此问题的 5.0.0 版(或更高版本)即可 (it includes a newer version of webpack)。
您需要更新react-scripts到最新版本
npm update react-scripts --save
如果您在使用 GatsbyJs 时遇到此错误,您需要做的就是将 node 版本降级到 long-term 支持.别无他法
这可能不是每个人问题的答案。但是对于 运行 节点 17 及以上 docker 的任何人来说,正如大家所说的那样降级会有帮助。不需要 open-legacy-sslprovider。在您的 Dockerfile 中使用
进行简单切换
From node
使用
From node:16.*
修复了 docker 中的这个问题。
运行 审核为我解决了问题
npm audit fix --force
对于 Angular 应用:
您也可以在 package.json 中编辑 'npm start' 脚本而不是
"start": "ng serve -o"
至
"start": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve -o"
所以每次当你 运行 在 terminal/command 行
npm start
它会首先设置 NODE_OPTIONS 来避免这个问题。
与节点版本 v18.0.0 相同的错误
和 nuxt 框架版本 2.15 当 运行 开发服务器并且将被修复:
"scripts": {
"dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt"
}
在使用 VueJS 时遇到这个问题。
使用 -openssl-legacy-provider
的缺点是它不受旧节点版本的支持。提供此标志时,较旧的 Node 版本根本不会 运行。
但我仍然希望与 Node v16 及更早版本兼容。
VueJS 使用 md4
算法生成哈希值(实际上它是 WebPack 的底层)。 md4
可以很容易地替换为 md5
用于此类目的。使用的算法类型在大多数地方都是硬编码的,因此无法配置另一种算法。
所以我想到了另一个解决方法。拦截来自 crypto
模块的原始 createHash()
调用并将其替换为修改版本的函数。这是我的 vue.config.js
文件的开头:
const crypto = require('crypto');
/**
* md4 algorithm is not available anymore in NodeJS 17+ (because of lib SSL 3).
* In that case, silently replace md4 by md5 algorithm.
*/
try {
crypto.createHash('md4');
} catch (e) {
console.warn('Crypto "md4" is not supported anymore by this Node version');
const origCreateHash = crypto.createHash;
crypto.createHash = (alg, opts) => {
return origCreateHash(alg === 'md4' ? 'md5' : alg, opts);
};
}
原因:
这个错误是因为node.js17使用了OpenSSL3,它改变了md家族(包括md4)的初始化上下文的代码,这是一个破坏性的变化。
如果您使用 docker build 构建应用程序,也会发生该错误,因为它默认会提取最新版本的 Node.JS。
安装 nvm 节点版本管理器:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
安装最新的 LTS 版本:
nvm install --lts
使用 LTS 版本:
nvm use --lts
完成!
来源:https://itsmycode.com/error-digital-envelope-routines-unsupported/
我创建了默认的 IntelliJ IDEA React 项目并得到了这个:
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 (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/util/createHash.js:135:53)
at NormalModule._initBuildHash (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:417:16)
at handleParseError (/Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:471:10)
at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:503:5
at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:358:12
at /Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:373:3
at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
at iterateNormalLoaders (/Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
/Users/user/Programming Documents/WebServer/untitled/node_modules/react-scripts/scripts/start.js:19
throw err;
^
这似乎是最近的问题 - webpack ran into this 4 days ago and is still working on it.
Failed to construct transformer: Error: error:0308010C:digital envelope routines::unsupported
解决上述错误最简单易行的方法是将 Node.js 降级到 v14.18.1。然后只需删除文件夹 node_modules
并尝试重建您的项目,您的错误必须得到解决。
现在有两个选项-
1.尝试卸载 Node.js 版本 17+ 并重新安装 Node.js 版本 16+
您可以从他们的 official site. or more specific downloads from here;
重新安装当前的 LTS node js 版本您可以使用 NVM(节点版本管理器)
- Linux 和 Mac 用户可以使用这个 nvm 包 - https://github.com/nvm-sh/nvm
- Windows 用户可以使用这个 nvm 包 - https://github.com/coreybutler/nvm-windows
2。打开终端并按照说明粘贴这些内容:
Linux & Mac OS (windows git bash)-
export NODE_OPTIONS=--openssl-legacy-provider
Windows命令提示符-
set NODE_OPTIONS=--openssl-legacy-provider
引用link.
在您的 package.json 中:更改此行
"start": "react-scripts start"
至
"start": "react-scripts --openssl-legacy-provider start"
如果我们使用 Node.js 的当前 LTS 版本,则不会出现此错误。将您的 Node.js 版本降级到当前的 LTS 版本 (16.13.0)。
可以通过多种方式安装所需的版本。其中之一是使用 nvm(Node.js 版本管理器)。
第一步:安装nvm(如果没有安装,按照Install Node.js Locally with Node Version Manager (nvm))
第 2 步:
nvm install 16.13.0
(或 lts)
我在 Docker 构建中遇到了这个问题,我在 Docker 文件中添加了这一行:
RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build && yarn install --production --ignore-scripts --prefer-offline
对于本地开发,在文件package.json.
中添加开关这是 Node.js 版本。
我在 Node.js 17 上遇到了这个错误,但是当我使用 nvm
.
尝试:
npm create react-app --template typescript foo --use-npm
如果您遇到此错误并且不想更改主要配置,则可以使用以下方法轻松解决。不过,我不确定是否建议将其作为一种好的做法。
欢迎指正。
最初,假设这是我的 package.json
文件的脚本部分:
...
"version": "1.0.0",
"scripts": {
...
"build": "npm run build:test-app:testing",
"build:test-app:testing": "ng build test-app --deploy-url https://test-app.com/ --configuration=test-config",
...
},
"private": true,
...
要使用此 export NODE_OPTIONS=--openssl-legacy-provider
您可以执行以下操作:
"version": "1.0.0",
"scripts": {
....
"build": "NODE_OPTIONS=--openssl-legacy-provider npm run build:test-app:testing”,
"build:test-app:testing": "NODE_OPTIONS=--openssl-legacy-provider ng build test-app --deploy-url https://test-app.com/ --configuration=test-config"
...
},
"private": true,
记下构建脚本。我添加了一个选项:NODE_OPTIONS=--openssl-legacy-provider
这有助于解决 Node.js 版本 17 中的错误。
对于那些可以灵活更改构建系统 Node.js 版本的用户,只需切换到低于 17 的版本,例如版本 16。
对于Docker,最初使用这个的用例,始终拉取最新版本:
...
FROM node:alpine
...
您可以切换到类似的内容:
...
FROM node:16-alpine3.12
...
我在 GitHub 上找到了以下命令:
对于Windows,在cmd中使用以下命令:
set NODE_OPTIONS=--openssl-legacy-provider
对于 Unix,使用:
export NODE_OPTIONS=--openssl-legacy-provider
我在使用 Node.js 17.0.1 时遇到了同样的问题。我按照以下步骤解决了它:
打开控制面板→程序和功能→Node.js 并通过右键单击 a
卸载 Node.js前往网站https://nodejs.org/en/下载版本并安装。
这个解决方案对我有用。
此错误出现在 Node.js 版本 17+ 中,因此请尝试降级 Node.js 版本。
- 从计算机中卸载 Node.js。
- 下载 Node.js 版本 16 并从 https://nodejs.org/download/release/v16.13.0/ 重新安装
就这些了。
这对我有用(从 Node.js 17 降级到 Node.js 16):
nvm install --lts
nvm use --lts
在 Dockerfile 上你应该添加:
ENV NODE_OPTIONS=--openssl-legacy-provider
并为大多数用户下载推荐版本。
然后从您的 PC 上卸载 Node.js 并安装 推荐的 版本。
据我了解,这是开发团队的问题。他们会尽快修复它,但同时使用推荐的版本,一切都会好的。
部分热门答案无效。
export NODE_OPTIONS=--openssl-legacy-provider
一些热门答案不适用,正在修改 package.json
文件:
"start": "react-scripts --openssl-legacy-provider start"
这是由 OpenSSL
的最新 node.js V17
兼容问题引起的,请参阅 GitHub 上的 this and this 问题。
最简单的事情就是从 node.js V17
降级到 node.js V16
。请参阅 node.js
。
我今天遇到了这个问题,并通过使用“nvm”切换 Node.js 版本解决了这个问题。
我一直在使用 Node.js、Next.js, and React 进行几个个人项目...我经常遇到的情况是我不记得 [=19 的确切版本=] 我用在哪个项目上。
所以通常我会尝试将 Node.js 16 用于当前使用 Node.js 14 的项目(我目前使用 Node.js 17)。
我还没有找到更好的方法来记住每个项目的 Node.js 版本,所以我通常只保存 运行 启动应用程序所需的所有命令readme.MD.
在终端 (OS X) 中,只需像这样降级:
sudo n 16.13.0
这在我的应用程序博览会中对我有用(从 Node.js 17 降级到 Node.js 12 或 14)。
如果你安装了 nvm,你可以更改节点的版本:
首先检查 nvm 中 Node.js 的版本:
nvm list
其次,安装12或14版:
nvm install v12.22.8
检查
node -v
v17.4.0
然后回滚到 node --lts (node v16.13.2 (npm v8.1.2)) 使用 nvm
对于 bash shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
对于 zsh shell
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | zsh
安装 nvm 之后
nvm install --lts
检查
node -v
v16.13.2
重试
在Angular.io项目中,Nodes.js的接受(不受支持)版本是v16.x.x.
在Nodes v17.x版本中,出现与本题描述相同的错误。
解法:
卸载节点并重新安装版本v16.x(对于Windows)。
已使用 lts
修复echo "lts" > .nvmrc
nvm install
如果您使用的是 react-scripts
,您现在只需升级到似乎已解决此问题的 5.0.0 版(或更高版本)即可 (it includes a newer version of webpack)。
您需要更新react-scripts到最新版本
npm update react-scripts --save
如果您在使用 GatsbyJs 时遇到此错误,您需要做的就是将 node 版本降级到 long-term 支持.别无他法
这可能不是每个人问题的答案。但是对于 运行 节点 17 及以上 docker 的任何人来说,正如大家所说的那样降级会有帮助。不需要 open-legacy-sslprovider。在您的 Dockerfile 中使用
进行简单切换From node
使用
From node:16.*
修复了 docker 中的这个问题。
运行 审核为我解决了问题
npm audit fix --force
对于 Angular 应用: 您也可以在 package.json 中编辑 'npm start' 脚本而不是
"start": "ng serve -o"
至
"start": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve -o"
所以每次当你 运行 在 terminal/command 行
npm start
它会首先设置 NODE_OPTIONS 来避免这个问题。
与节点版本 v18.0.0 相同的错误 和 nuxt 框架版本 2.15 当 运行 开发服务器并且将被修复:
"scripts": {
"dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt"
}
在使用 VueJS 时遇到这个问题。
使用 -openssl-legacy-provider
的缺点是它不受旧节点版本的支持。提供此标志时,较旧的 Node 版本根本不会 运行。
但我仍然希望与 Node v16 及更早版本兼容。
VueJS 使用 md4
算法生成哈希值(实际上它是 WebPack 的底层)。 md4
可以很容易地替换为 md5
用于此类目的。使用的算法类型在大多数地方都是硬编码的,因此无法配置另一种算法。
所以我想到了另一个解决方法。拦截来自 crypto
模块的原始 createHash()
调用并将其替换为修改版本的函数。这是我的 vue.config.js
文件的开头:
const crypto = require('crypto');
/**
* md4 algorithm is not available anymore in NodeJS 17+ (because of lib SSL 3).
* In that case, silently replace md4 by md5 algorithm.
*/
try {
crypto.createHash('md4');
} catch (e) {
console.warn('Crypto "md4" is not supported anymore by this Node version');
const origCreateHash = crypto.createHash;
crypto.createHash = (alg, opts) => {
return origCreateHash(alg === 'md4' ? 'md5' : alg, opts);
};
}
原因:
这个错误是因为node.js17使用了OpenSSL3,它改变了md家族(包括md4)的初始化上下文的代码,这是一个破坏性的变化。 如果您使用 docker build 构建应用程序,也会发生该错误,因为它默认会提取最新版本的 Node.JS。
安装 nvm 节点版本管理器:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
安装最新的 LTS 版本:
nvm install --lts
使用 LTS 版本:
nvm use --lts
完成!
来源:https://itsmycode.com/error-digital-envelope-routines-unsupported/