错误信息“错误:0308010C:不支持数字信封例程::”

我创建了默认的IntelliJ IDEA React项目并得到了这个:

Error: error:0308010C:digital envelope routines::unsupportedat 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:5at /Users/user/Programming Documents/WebServer/untitled/node_modules/webpack/lib/NormalModule.js:358:12at /Users/user/Programming Documents/WebServer/untitled/node_modules/loader-runner/lib/LoaderRunner.js:373:3at 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:19throw err;^

这似乎是最近的一个问题-webpack 4天前遇到了这个问题,目前还在研究中

833096 次浏览

构造变压器失败:错误:错误:0308010C:不支持数字信封例程::

解决上述错误的最简单和最简单的解决方案是将Node.js降级到v14.18.1。然后只需删除文件夹node_modules并尝试重建您的项目,您的错误必须得到解决。

现在有两个选择——

1.尝试卸载Node.js版本17+并重新安装Node.js版本16+

2.打开终端并按照描述粘贴这些:

Linux和macOS(Windowsgitbash

export NODE_OPTIONS=--openssl-legacy-provider

windows命令提示符-

set NODE_OPTIONS=--openssl-legacy-provider

Windows PowerShell-

$env:NODE_OPTIONS = "--openssl-legacy-provider"

参考链接

在您的package.json:更改此行

"start": "react-scripts start"

"start": "react-scripts --openssl-legacy-provider start"

如果我们使用当前LTS版本的Node.js则不会出现此错误。将您的Node.js版本降级到当前LTS版本(16.13.0)。

有多种方法可以安装所需的版本。其中之一是使用nvm(Node.js版本管理器)。

我在Docker构建中遇到了这个问题,我在Docker文件中添加了这行:

RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build && yarn install --production --ignore-scripts --prefer-offline

对于本地开发,在文件package.json中添加开关。

这是Node.js版本。

我在Node.js17上有这个错误,但是当我使用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

这有助于解决版本17Node.js此错误。

对于那些可以灵活更改构建系统Node.js版本的人,只需切换到低于17的版本,例如版本16。

对于Docker,最初使用this的用例,它总是拉取最新版本:

...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.js17.0.1中遇到同样的问题。我通过以下步骤解决了它:

  • 打开控制面板程序和功能Node.js并通过右键单击卸载Node.js

  • 转到网站https://nodejs.org/en/并下载版本并安装。

这个解决方案为我工作。

此错误出现Node.js版本17+,因此请尝试降级Node.js版本。

  1. 从计算机上卸载Node.js。
  2. 下载Node.js版本16并从https://nodejs.org/download/release/v16.13.0/再次安装

仅此而已。

这对我很有效(从Node.js17降级到Node.js16):

nvm install --ltsnvm use --lts

使用Node.js版本管理器for windows)。

在Dockerfile上,您应该添加:

ENV NODE_OPTIONS=--openssl-legacy-provider

转到:https://nodejs.org/en/

并为大多数用户下载建议版本。

然后从PC上卸载Node.js并安装建议版本。

据我所知,这是开发团队的问题。他们会尽快修复它,但在此期间使用推荐的版本,一切都会好起来的。

一些顶级答案不起作用。

export NODE_OPTIONS=--openssl-legacy-provider

一些顶级答案不适用,修改package.json文件:

"start": "react-scripts --openssl-legacy-provider start"

这是由OpenSSL的最新node.js V17兼容问题引起的,请参阅GitHub上的这个这个问题。

最简单的事情就是从node.js V17降级到node.js V16。关于如何降级node.js,请参阅这篇文章

我今天遇到了这个问题,并通过使用“nvm”切换Node.js版本来解决它。

我一直在使用Node.js,Next.js反应进行几个个人项目……经常发生在我身上的是,我不记得我在哪个项目中使用哪个版本的Node.js。

所以通常我会尝试将Node.js16用于当前使用Node.js14的项目(我目前在Node.js17)。

我还没有找到更好的方法来记住每个项目的Node.js版本,所以我通常只保存我需要运行的所有命令,以便在readme.MD.启动应用程序

在终端(OS X)中,只需像这样降级:

sudo n 16.13.0

这在我的应用程序博览会中为我工作(从Node.js17降级到Node.js12或14)。

如果您安装了nvm,您可以更改node的版本:

首先检查nvm中Node.js的版本:

nvm list

第二,安装版本12或14:

nvm install v12.22.8

检查

node -vv17.4.0

然后回滚到node--lts(node v16.13.2(npm v8.1.2))以供使用nvm

nvm install 16

然后检查node -v并确认它是版本16。

Angular.io项目中,Nodes.js的可接受(不受支持)版本是v16. x. x

节点v17. x版本中,会出现此问题中描述的相同错误。

解决方案:

卸载节点并重新安装v16. x版本(适用于Windows)。

我使用LTS版本修复:

echo "lts" > .nvmrcnvm install

React Native有一个错误的脚本来查找Node.js可执行文件的路径。

这会将版本设置为Node.js到节点版本管理器的最新稳定版本。

我发现,即使Node.js在我的路径中,如果我有一个~/. nvm目录,它也会尝试在nvm中找到使用并失败。这将当前节点设置为链接到~/. nvm中的节点,因此React Native可以找到。

如果您使用的是react-scripts,您现在可以简单地升级到5.0.0(或更高版本),这似乎已经解决了这个问题(它包括一个较新版本的webpack)。

您需要将react-脚本更新到最新版本

npm update react-scripts --save

如果您在使用GatsbyJs时遇到此错误,您需要做的就是将节点版本降级到长期支持。没有其他救赎

使用docker运行反应

这可能不是每个人都能回答这个问题的答案。但是对于任何在docker中运行节点17及以上的人来说,正如每个人所说的那样降级将是有帮助的。不需要开放的传统ssl提供程序。在你的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"

当您在终端/命令行中运行npm run start时,它将首先设置NODE_OPTIONS以避免问题。

与节点版本v18.0.0相同的错误和nuxt框架版本2.15运行开发服务器时,将通过以下方式修复:

"scripts": {"dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt"}

在使用VueJS时遇到了这个问题。

使用-openssl-legacy-provider的缺点是旧版本的Node不支持它。提供此标志时,旧版本的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。


废弃方法

2022-10-27开始,当前的LTS版本是v18.12.0 (npm v8.19.2)


安装Node版本管理器或nvm

curl 'https://raw.githubusercontent.com/creationix/nvm/master/install.sh' | bash;

安装最新的LTS版本:

nvm install --lts;

使用LTS版本:

nvm use --lts;

成交!

来源:https://itsmycode.com/error-digital-envelope-routines-unsupported/

我在使用v18.4.0构建跳房子时遇到了同样Node.js错误,set NODE_OPTIONS=--openssl-legacy-provider救了我!

日志

D:\code\rust\hoppscotch-app\hoppscotch>pnpm install && pnpm run generateScope: all 5 workspace projectsLockfile is up-to-date, resolution step is skippedAlready up-to-datepackages/codemirror-lang-graphql prepare$ rollup -c│ Browserslist: caniuse-lite is outdated. Please run:│   npx browserslist@latest --update-db│   Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating││ src/index.js → dist/index.cjs, ./dist...│ created dist/index.cjs, ./dist in 2.8s└─ Done in 4.8spackages/hoppscotch-data prepare$ tsup src --dts[20 lines collapsed]│ CJS dist\chunk-LZ75CAKS.js     13.00 B│ DTS Build start│ DTS ⚡️ Build success in 2261ms│ DTS dist\index.d.ts              714.00 B│ DTS dist\rest\index.d.ts         2.18 KB│ DTS dist\graphql\index.d.ts      589.00 B│ DTS dist\collection\index.d.ts   1.30 KB│ DTS dist\rest\content-types.d.ts 473.00 B│ DTS dist\rest\HoppRESTAuth.d.ts  882.00 B│ DTS dist\type-utils.d.d.ts       1.00 B└─ Done in 3.8spackages/hoppscotch-js-sandbox postinstall$ pnpm run build│ > @hoppscotch/js-sandbox@1.0.0 build D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-js-sandbox│ > npx tsc└─ Done in 8.7s. prepare$ husky install│ husky - Git hooks installed└─ Done in 300mspackages/hoppscotch-app postinstall$ pnpm run gql-codegen[12 lines collapsed]│ [14:58:01] Load GraphQL documents [started]│ [14:58:01] Load GraphQL documents [completed]│ [14:58:01] Generate [started]│ [14:58:01] Generate [completed]│ [14:58:01] Generate helpers/backend/backend-schema.json [completed]│ [14:58:02] Load GraphQL documents [completed]│ [14:58:02] Generate [started]│ [14:58:02] Generate [completed]│ [14:58:02] Generate helpers/backend/graphql.ts [completed]│ [14:58:02] Generate outputs [completed]└─ Done in 4s
> hoppscotch-app@2.2.1 generate D:\code\rust\hoppscotch-app\hoppscotch> pnpm -r do-build-prod
Scope: 4 of 5 workspace projectspackages/hoppscotch-js-sandbox do-build-prod$ pnpm run build│ > @hoppscotch/js-sandbox@1.0.0 build D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-js-sandbox│ > npx tsc└─ Done in 7.5spackages/hoppscotch-app do-build-prod$ pnpm run generate│ > hoppscotch-app@2.2.1 generate D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-app│ > nuxt generate --modern│ i Sentry reporting is disabled (no DSN has been provided)│ i Production build│ i Bundling only for client side│ i Target: static│ i Using components loader to optimize imports│ i Discovered Components: node_modules/.cache/nuxt/components/readme.md│ √ Builder initialized│ √ Nuxt files generated│ i Compiling Client│  ERROR  Error: error:0308010C:digital envelope routines::unsupported│     at new Hash (node:internal/crypto/hash:67:19)│     at Object.createHash (node:crypto:133:10)│     at module.exports (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib│     at NormalModule._initBuildHash (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_module│     at handleParseError (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\l│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at runSyncOrAsync (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at Array.<anonymous> (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loa│     at Storage.finished (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\enhanced-resolve@4.5.0\node_modules\e│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\enhanced-resolve@4.5.0\node_modules\enhanced-resolve\li│  WARN  Browserslist: caniuse-lite is outdated. Please run:│   npx browserslist@latest --update-db│   Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating│  ERROR  error:0308010C:digital envelope routines::unsupported│   at new Hash (node:internal/crypto/hash:67:19)│   at Object.createHash (node:crypto:133:10)│   at module.exports (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\u│   at NormalModule._initBuildHash (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\│   at handleParseError (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js:5│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js:3│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Loader│   at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\lo│   at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\lo│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Loader│   at context.callback (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\babel-loader@8.2.3_@babel+core@7.16.12\node_modules\babel│ D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\LoaderRunne│                       throw e;│                       ^│ Error: error:0308010C:digital envelope routines::unsupported│     at new Hash (node:internal/crypto/hash:67:19)│     at Object.createHash (node:crypto:133:10)│     at module.exports (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib│     at NormalModule._initBuildHash (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_module│     at handleParseError (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\l│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at context.callback (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\load│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\cache-loader@4.1.0_webpack@4.46.0\node_modules\cache-lo│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\graceful-fs@4.2.8\node_modules\graceful-fs\graceful-fs.│     at FSReqCallback.oncomplete (node:fs:201:23) {│   opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],│   library: 'digital envelope routines',│   reason: 'unsupported',│   code: 'ERR_OSSL_EVP_UNSUPPORTED'│ }│ Node.js v18.4.0│  ELIFECYCLE  Command failed with exit code 1.└─ Failed in 8.3sD:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-app: ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  hoppscotch-app@2.2.1 do-build-prod: `pnpm run generate`Exit status 1 ELIFECYCLE  Command failed with exit code 1.
D:\code\rust\hoppscotch-app\hoppscotch>npx browserslist@latest --update-dbNeed to install the following packages:browserslist@4.20.4Ok to proceed? (y) yLatest version:     1.0.30001357Updating caniuse-lite version$ pnpm up caniuse-litecaniuse-lite has been successfully updated
No target browser changes
D:\code\rust\hoppscotch-app\hoppscotch>pnpm install && pnpm run generateScope: all 5 workspace projectsLockfile is up-to-date, resolution step is skippedAlready up-to-datepackages/codemirror-lang-graphql prepare$ rollup -c│ Browserslist: caniuse-lite is outdated. Please run:│   npx browserslist@latest --update-db│   Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating││ src/index.js → dist/index.cjs, ./dist...│ created dist/index.cjs, ./dist in 2.8s└─ Done in 4.8spackages/hoppscotch-data prepare$ tsup src --dts[20 lines collapsed]│ CJS dist\chunk-JUWXSDKJ.js     1010.00 B│ DTS Build start│ DTS ⚡️ Build success in 2250ms│ DTS dist\index.d.ts              714.00 B│ DTS dist\rest\index.d.ts         2.18 KB│ DTS dist\graphql\index.d.ts      589.00 B│ DTS dist\collection\index.d.ts   1.30 KB│ DTS dist\rest\content-types.d.ts 473.00 B│ DTS dist\rest\HoppRESTAuth.d.ts  882.00 B│ DTS dist\type-utils.d.d.ts       1.00 B└─ Done in 3.7spackages/hoppscotch-js-sandbox postinstall$ pnpm run build│ > @hoppscotch/js-sandbox@1.0.0 build D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-js-sandbox│ > npx tsc└─ Done in 8.5s. prepare$ husky install│ husky - Git hooks installed└─ Done in 335mspackages/hoppscotch-app postinstall$ pnpm run gql-codegen[12 lines collapsed]│ [15:02:37] Load GraphQL documents [started]│ [15:02:37] Load GraphQL documents [completed]│ [15:02:37] Generate [started]│ [15:02:37] Generate [completed]│ [15:02:37] Generate helpers/backend/backend-schema.json [completed]│ [15:02:38] Load GraphQL documents [completed]│ [15:02:38] Generate [started]│ [15:02:38] Generate [completed]│ [15:02:38] Generate helpers/backend/graphql.ts [completed]│ [15:02:38] Generate outputs [completed]└─ Done in 3.8s
> hoppscotch-app@2.2.1 generate D:\code\rust\hoppscotch-app\hoppscotch> pnpm -r do-build-prod
Scope: 4 of 5 workspace projectspackages/hoppscotch-js-sandbox do-build-prod$ pnpm run build│ > @hoppscotch/js-sandbox@1.0.0 build D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-js-sandbox│ > npx tsc└─ Done in 6.9spackages/hoppscotch-app do-build-prod$ pnpm run generate│ > hoppscotch-app@2.2.1 generate D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-app│ > nuxt generate --modern│ i Sentry reporting is disabled (no DSN has been provided)│ i Production build│ i Bundling only for client side│ i Target: static│ i Using components loader to optimize imports│ i Discovered Components: node_modules/.cache/nuxt/components/readme.md│ √ Builder initialized│ √ Nuxt files generated│ i Compiling Client│  ERROR  Error: error:0308010C:digital envelope routines::unsupported│     at new Hash (node:internal/crypto/hash:67:19)│     at Object.createHash (node:crypto:133:10)│     at module.exports (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib│     at NormalModule._initBuildHash (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_module│     at handleParseError (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\l│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at runSyncOrAsync (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at Array.<anonymous> (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loa│     at Storage.finished (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\enhanced-resolve@4.5.0\node_modules\e│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\enhanced-resolve@4.5.0\node_modules\enhanced-resolve\li│  WARN  Browserslist: caniuse-lite is outdated. Please run:│   npx browserslist@latest --update-db│   Why you should do it regularly: https://github.com/browserslist/browserslist#browsers-data-updating│  ERROR  error:0308010C:digital envelope routines::unsupported│   at new Hash (node:internal/crypto/hash:67:19)│   at Object.createHash (node:crypto:133:10)│   at module.exports (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\u│   at NormalModule._initBuildHash (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\│   at handleParseError (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js:5│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js:3│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Loader│   at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\lo│   at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\lo│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Loader│   at context.callback (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader│   at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\babel-loader@8.2.3_@babel+core@7.16.12\node_modules\babel│ D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\LoaderRunne│                       throw e;│                       ^│ Error: error:0308010C:digital envelope routines::unsupported│     at new Hash (node:internal/crypto/hash:67:19)│     at Object.createHash (node:crypto:133:10)│     at module.exports (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib│     at NormalModule._initBuildHash (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_module│     at handleParseError (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\l│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\webpack@4.46.0\node_modules\webpack\lib\NormalModule.js│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at iterateNormalLoaders (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\loader-runner\lib\Load│     at context.callback (D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\loader-runner@2.4.0\node_modules\load│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\cache-loader@4.1.0_webpack@4.46.0\node_modules\cache-lo│     at D:\code\rust\hoppscotch-app\hoppscotch\node_modules\.pnpm\graceful-fs@4.2.8\node_modules\graceful-fs\graceful-fs.│     at FSReqCallback.oncomplete (node:fs:201:23) {│   opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],│   library: 'digital envelope routines',│   reason: 'unsupported',│   code: 'ERR_OSSL_EVP_UNSUPPORTED'│ }│ Node.js v18.4.0│  ELIFECYCLE  Command failed with exit code 1.└─ Failed in 8.2sD:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-app: ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  hoppscotch-app@2.2.1 do-build-prod: `pnpm run generate`Exit status 1 ELIFECYCLE  Command failed with exit code 1.
D:\code\rust\hoppscotch-app\hoppscotch>echo %NODE_OPTIONS%%NODE_OPTIONS%
D:\code\rust\hoppscotch-app\hoppscotch>set NODE_OPTIONS=--openssl-legacy-provider
D:\code\rust\hoppscotch-app\hoppscotch>echo %NODE_OPTIONS%--openssl-legacy-provider
D:\code\rust\hoppscotch-app\hoppscotch>pnpm run generate
> hoppscotch-app@2.2.1 generate D:\code\rust\hoppscotch-app\hoppscotch> pnpm -r do-build-prod
Scope: 4 of 5 workspace projectspackages/hoppscotch-js-sandbox do-build-prod$ pnpm run build│ > @hoppscotch/js-sandbox@1.0.0 build D:\code\rust\hoppscotch-app\hoppscotch\packages\hoppscotch-js-sandbox│ > npx tsc└─ Done in 7.1spackages/hoppscotch-app do-build-prod$ pnpm run generate[732 lines collapsed]│ √ Generated route "/vi/enter"│ √ Generated route "/vi/graphql"│ √ Generated route "/vi/join-team"│ √ Generated route "/vi/profile"│ √ Generated route "/vi/realtime"│ √ Generated route "/vi/settings"│ √ Generated route "/"│ √ Client-side fallback created: 404.html│ i Generating sitemaps│ √ Generated /sitemap.xml└─ Done in 6m 37.1s
D:\code\rust\hoppscotch-app\hoppscotch>

危险

这个问题有30多个答案,大多数建议将Node.js降级到v17之前或使用传统的SSL提供程序。这两个解决方案都是0。

错误的原因

在Node.jsv17中,Node.js开发人员关闭了SSL提供程序中的一个安全漏洞。此修复是一个重大更改,与NPM中SSL包的类似重大更改相对应。当您尝试在Node.jsv17或更高版本中使用SSL而不同时升级package.json中的SSL包时,您将看到此错误。

正确(安全)解决方案

使用Node.js的最新版本,也使用带有安全修复的最新包。

对于许多人来说,以下命令将解决此问题:

npm audit fix --force

但是,请注意,对于复杂的构建,上述命令将引入破坏安全修复程序,这些修复程序可能会潜在破坏您的构建。

一个不那么严厉的(也是正确的)解决方案

在您的Webpack配置中,设置以下任一项:

A.设置output.hashFunction = 'xxhash64'
B.集合experiments.futureDefaults = true

查看更多信息格雷格的回答

在PowerShell中:

$env:NODE_OPTIONS = "--openssl-legacy-provider"

它适用于Node.jsv18.7.0。

发布了很多变通方法(主要是降级Node.js、OpenSSL或允许不安全的哈希),但潜在的问题是Webpack的output.hashFunction默认为md4,这在最新版本的OpenSSL中触发了此错误。

来自Webpack的output.hash功能文档:

从Webpack v5.54.0+开始,hashFunction支持xxhash64作为更快的算法,当experiments.futureDefaults已启用。

解决方案是:

  1. 设置output.hashFunction = 'xxhash64'
  2. 设置experiments.futureDefaults = true

在您的Webpack配置中。

当项目上的包没有更新并且您使用的react版本不是最新的时,这是一个常见错误。

要解决此问题,您需要以这种方式更改package.json文件:

改变这个👇

"scripts": {"start": "react-scripts start","build": "react-scripts build","test": "react-scripts test","eject": "react-scripts eject"}

到这个👇

"scripts": {"start": "react-scripts --openssl-legacy-provider start","build": "react-scripts --openssl-legacy-provider build","test": "react-scripts test","eject": "react-scripts eject"}

当我使用nvm更改节点版本时,我遇到了同样的问题。如果Ypu在您的项目中使用sass,请尝试:

sudo npm rebuild node-sass

这个答案是一个直接的OpenSSL系统级解决方法,而不涉及以前工作的构建配置。

在理想的情况下,您有时间升级和迁移不安全的构建依赖项,并确保您没有破坏应用程序中的其他内容(或者完全避免使用webpack,或者在我的情况下从vue-cli迁移到使用esbuild的vite)。

您“应该”改为(a)告诉webpack使用更新的哈希函数或(b)用npm audit减轻违规包。


系统级OpenSSL解决方法

最快的解决方法是暂时通过在系统范围的OpenSSL配置中启用“遗留”加密提供程序来重新启用MD4。

这是非常不安全和严厉的。之后,您应该禁用传统的加密方法。

(不幸的是,以下内容仅适用于Linux)。

  1. 备份现有的OpenSSL配置:
    sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.BAK

  2. 追加(或取消注释)以下配置以启用旧的“提供者”(OpenSSL称之为它们)。您可能想要sudo vim /etc/ssl/openssl.cnf或类似的。

    [provider_sect]default = default_sectlegacy = legacy_sect
    [default_sect]activate = 1
    [legacy_sect]activate = 1
  3. 像以前一样重新运行您的节点脚本。

  4. 之后禁用遗留提供程序

    sudo mv -f /etc/ssl/openssl.cnf.BAK /etc/ssl/openssl.cnf

这个解决方案来自回答类似的问题


根本原因是什么?

Node在*nix系统上使用OpenSSL进行哈希函数和加密。最新版本的OpenSSL默认禁用MD4-这将破坏任何以前使用MD4的程序。考虑到这一点,任何认为使用MD4进行文件哈希是一个“好主意”的npm包现在都被破坏了——尽管MD4一直是自1996年以来被RSA实验室打破!MD4也在2011年被rfc6150“正式”降级为过时。

快速修复建议并为我工作。cd到您制作的新应用程序目录;您可能需要sudo this install then run the following:

运行:npm install -g npm-check-updates

然后:ncu -u

然后:npm install

然后:npm start

通过卸载openssl 1.1.1,安装openssl 3(如果您使用chocolatey:choco install openssl.light)并将Angular更新到最新版本(当前为14),解决了上述webpack配置问题。

当然,正如大多数答案所建议的那样降级Node并不是一种正确的方式。

我犯了同样的错误。

我的案例:

安装了新的反应打字脚本应用程序,添加了一些scss和一些组件。

在本地,我的构建工作正常,但当我尝试发布时,它失败并出错:

Error: error:0308010C:digital envelope routines::unsupported

我通过将我的react-cript库更新到5.0.1来修复这个问题

"react-scripts": "^5.0.1",

作为2022年的读者,没有一个答案解决了Webpack 5用户早期修复了这个问题(但没有回传到Webpack 4)的事实。如果你使用的是Webpack 5,只需至少升级到#0。请参阅跟踪此问题的线程上的此评论这里

我在vue js项目中遇到了同样的问题。我所做的是从机器上卸载新版本(>18)的节点js并安装以前的版本(v16.14.2)。它可以工作

在项目文件夹中运行命令

npm audit fix --force

它将更新package.json文件。

我通过在更新webpack后更新我的babel-loader版本来解决这个错误。然而,这可能是由于另一个加载程序或插件,loader-runner出现在原始问题的控制台输出中。见评论这里