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在4天前就遇到了这个问题,目前仍在努力解决。
现在有两个选择---
1.尝试卸载Node.js 17+版本并重新安装Node.js 16+版本
你可以使用NVM(节点版本管理器)来进行管理。
- Linux和Mac用户可以使用这个nvm包--https://github.com/nvm-sh/nvm。
- Windows用户可以使用这个nvm包--https://github.com/coreybutler/nvm-windows。
2.打开终端,按所述粘贴这些内容。
Linux和macOS (Windows Git Bash)-
export NODE_OPTIONS=--openssl-legacy-provider
Windows命令提示符---
set NODE_OPTIONS=--openssl-legacy-provider
Windows PowerShell-
$env:NODE_OPTIONS = "--openssl-legacy-provider"
参考链接。
/usr/local/Cellar/node/17.0.1/bin/node: --openssl-legacy-provider is not allowed in NODE_OPTIONS
- Ben Winding 2021-11-13
set NODE_OPTIONS=--openssl-legacy-provider
它给出了同样的错误。
- Zeeshan Ahmad Khalil 2021-11-25
--openssl-legacy-provider
。要使用这个参数,你必须在v17及以上版本,而且这个参数必须放在你的package.json
里面,出于安全考虑,它不允许你只把它放在NODE_OPTIONS
环境变量中。然后它仍然不能工作。随着越来越多的人进入v16 LTS,这只会成为一个更大的问题,因为很多项目仍然依赖于Webpack 4。
- Maxim Therrien 2022-02-27
在你的package.json中:改变这一行
"start": "react-scripts start"
至
"start": "react-scripts --openssl-legacy-provider start"
--openssl-legacy-provider
意味着你现在几乎肯定是使用已知的不安全SSL运行,所以这可能会减轻症状,但它可能不会解决根本问题。
- Mike 'Pomax' Kamermans 2021-10-25
如果我们使用当前的Node.js的LTS版本,那么这个错误就不会出现。将你的Node.js版本降级到当前的LTS版本(16.13.0)。
可以有多种方法来安装所需的版本。其中之一是使用nvm(Node.js版本管理器)。
第1步:安装nvm(如果没有安装,请按照用Node版本管理器(nvm)本地安装Node.js的方法进行安装)
第2步。
nvm install 16.13.0
(或lts)
危险的是
这个问题有30多个答案,大多数建议将Node.js降级到v17之前,或者使用传统的SSL提供程序。这两种解决方案都是黑客,使你的构建受到安全威胁。
出错的原因
在Node.js v17中,Node.js开发者关闭了SSL提供者中的一个安全漏洞。这个修复是一个破坏性的变化,与NPM中SSL包的类似破坏性变化相对应。当你试图在Node.js v17或更高版本中使用SSL,而不同时升级你package.json
中的那些SSL包时,那么你会看到这个错误。
正确的(安全的)解决方案
使用最新版本的Node.js,同时使用最新的安全补丁的软件包。
对许多人来说,下面的命令可以解决这个问题。
npm audit fix --force
然而,请注意,对于复杂的构建,上述命令将拉入破坏性的安全修复,这可能潜在地破坏你的构建。
一个不那么强硬的(也是正确的)解决方案
在你的Webpack配置中,设置以下其中一项。
A.设置output.hashFunction = 'xxhash64'
B.设置experiments.futureDefaults = true
请看更多信息在格雷格的回答中。
npm audit fix --force
是唯一对我有效的方法,但我也不得不先升级我项目中的所有软件包依赖。nodejs.dev/en/learn/…
- Luke Hutchison 2022-09-08
npm audit fix
,因为我使用的代理不支持它。另一种方法是进行npm audit --regsitry=https://resgistry.npmjs.org
,并手动检查软件包以找到违规者(在我的例子中是elliptic
)。寻找Use of a Broken or Risky Cryptographic Algorithm
。然后手动将该软件包更新为非违规的版本。
- MichaelM 2022-09-16
audit fix --force
升级软件包的方式比普通的升级方式更强硬。--force
标志甚至可以升级破坏性的变化,这正是我们许多(也许是大多数)有这种问题的人需要解决的问题(除非使用Greg的答案中提到的不那么严厉的选项)。
- David 2022-10-09
output.hashFunction = 'xxhash64'
添加到我的webpack.config.js文件中时(不容易找到,BTW),我收到了这个错误信息。(node:12080) [DEP0111] DeprecationWarning: Access to process.binding('http_parser') is deprecated. ... output is not defined
- Todd Hoatson 2022-12-22
一些顶级的答案并不奏效。
export NODE_OPTIONS=--openssl-legacy-provider
而一些顶级的答案是不适用的,修改package.json
文件。
"start": "react-scripts --openssl-legacy-provider start"
这是由node.js V17
与OpenSSL
的最新兼容问题引起的,见GitHub上的这个问题和这个问题。
最简单的是将node.js V17
降级为node.js V16
。请看这个帖子关于如何降级node.js
。
V.16
后,问题得到了解决。nvm install v16 && nvm alias default v16 && nvm use v16
.
- Manuel Lazo 2021-12-16
package.json
使用V16,这个错误没有发生。谢谢!
- Saravanan G 2022-01-17
这是Node.js的版本。
我在Node.js 17上有这个错误,但当我用nvm
把我的Node.js版本切换到旧版本(16)时,它就正常了。
choco uninstall nodejs
和choco install nodejs-lts
来安装LTS版本的node。
- Matthias T 2021-12-16
我在GitHub上找到了下面的命令。
对于Windows,在cmd中使用下面的命令。
set NODE_OPTIONS=--openssl-legacy-provider
对于Unix,请使用。
export NODE_OPTIONS=--openssl-legacy-provider
暂时的解决方案如下。实际解决方案是升级到Webpack 5。
2022年12月更新。
这对我来说是有效的(降级到Node.js 16)。
nvm install 16 --lts
nvm use 16
nvm install lts
,没有破折号(Windows 10 - Powershell)。
- Francesco Casula 2021-12-10
nvm install --lts
已经使用了它所安装的版本,所以不需要执行nvm use
。
- Tomás 2022-02-18
nvm install 16.15.0
或任何你想要的版本,然后nvm use 16.15.0
。
- Ted 2022-11-28
发布了很多解决方法(主要是降级Node.js、OpenSSL或允许不安全的散列),但根本问题是Webpack的output.hashFunction
默认为md4
,这在最近版本的OpenSSL中会触发这个错误。
来自Webpack的output.hashFunction docs。
Since Webpack v5.54.0+,
hashFunction
supportsxxhash64
as a faster algorithm, which will be used as default whenexperiments.futureDefaults
is enabled.
解决办法是:一是。
- 设为
output.hashFunction = 'xxhash64'
- 设为
experiments.futureDefaults = true
在你的Webpack配置中,你可以选择使用 "M "字。
file-loader
和css-loader
默认使用md4
。你可以在设置名称选项时强迫它们使用另一个散列算法,就像这样。'[name].[sha512:hash:6].[ext]'
- Kristian Roebuck 2022-11-16
output.hashFunction
到xxhash64
时。也许是因为我使用的是Webpack v4?
- Paul Razvan Berg 2022-12-12
Failed to construct transformer: Error: error:0308010C:digital envelope routines::unsupported
解决上述错误的最简单和最容易的方法是将Node.js降级到14.18.1版本。然后只需删除文件夹node_modules
,并尝试重建你的项目,你的错误一定会得到解决。
node_modules
文件夹。
- Tigerware 2021-10-28
原因是什么?
这个错误是因为node.js 17使用OpenSSL3,它改变了md家族(包括md4)初始化上下文的代码,这是一个突破性的变化。 如果你使用docker build构建应用程序,也会发生这个错误,因为它默认拉取最新版本的Node.JS。
废弃的方法
目前的LTS版本是v18.12.0 (npm v8.19.2)
,截止到2022-10-27
。
安装Node Version Manager或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/
在使用VueJS时,有这样的问题。
使用-openssl-legacy-provider
的缺点是,老的Node版本不支持它。旧的Node版本在提供这个标志时根本无法运行。
但我还是想与Node v16和更老的版本兼容。
VueJS使用md4
算法来生成哈希值(wel实际上是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
实例中。我最后只是在OpenSSL层面上解决了这个问题。stackoverflow.com/a/73904032/809572
- Josh Bowden 2022-09-30
检查一下
node -v
v17.4.0
然后回滚到node --lts (node v16.13.2 (npm v8.1.2)),为此要使用nvm。
nvm install 16
然后检查node -v
,确认它是第16版。
lts
的含义。现在是16版,一年后将会是18版,所以如果你告诉人们他们需要16版,请给出该版本的nvm说明,而不是 "无论lts是什么"。
- Mike 'Pomax' Kamermans 2022-09-04
我在Docker构建中遇到了这个问题,我在Docker文件中加入了这一行。
RUN export NODE_OPTIONS=--openssl-legacy-provider && yarn build && yarn install --production --ignore-scripts --prefer-offline
对于本地开发,在文件package.json中添加该开关。
--openssl-legacy-provider
?为什么所有的yarn
东西?请通过编辑(更改)您的答案来回复,而不是在评论中回复(没有 “编辑:”、“更新:”或类似的 - 答案应该看起来就像今天写的一样)。
- Peter Mortensen 2022-01-02
这个解决方案对我来说是有效的。
这个错误是在Node.js 17+版本中出现的,所以试着降低Node.js版本。
- 从计算机上卸载Node.js。
- 下载Node.js第16版,并从https://nodejs.org/download/release/v16.13.0/中再次安装它。
这就是全部了。
nvm install 16
,你就可以走了。
- Kyle Baker 2021-11-24
我也遇到了同样的错误。
我的案例。
安装了新的react typecript应用程序,添加了一些scss和一些组件。
在本地,我的构建工作正常,但当我试图发布时,却出现了错误,无法完成。
Error: error:0308010C:digital envelope routines::unsupported
我通过更新我的react-script库到5.0.1来解决这个问题。
"react-scripts": "^5.0.1",
如果你使用react-scripts
,你现在可以简单地升级到5.0.0(或以上)版本,这似乎已经解决了这个问题(它包括了一个较新的webpack版本)。
运行审计对我来说解决了这个问题
npm audit fix --force
如果你面临这个错误,而你又不想改变你的主要配置,一个简单的解决方法是使用以下方法。但我不确定这是否被推荐为一种好的做法。
请随时纠正。
最初,让我们说这是我的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
...
这是一个常见的错误,当项目上的软件包没有更新,而你使用的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"
}
在运行开发服务器时,节点版本v18.0.0和nuxt框架版本2.15出现同样的错误,并将通过以下方式进行修复。
"scripts": {
"dev": "NODE_OPTIONS=--openssl-legacy-provider nuxt"
}
我在使用Node.js v18.4.0构建hoppscotch时遇到了同样的错误,而set NODE_OPTIONS=--openssl-legacy-provider
救了我!
日程表
D:\code\rust\hoppscotch-app\hoppscotch>pnpm install && pnpm run generate
Scope: all 5 workspace projects
Lockfile is up-to-date, resolution step is skipped
Already up-to-date
packages/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.8s
packages/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.8s
packages/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 300ms
packages/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 projects
packages/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.5s
packages/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.3s
D:\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-db
Need to install the following packages:
browserslist@4.20.4
Ok to proceed? (y) y
Latest version: 1.0.30001357
Updating caniuse-lite version
$ pnpm up caniuse-lite
caniuse-lite has been successfully updated
No target browser changes
D:\code\rust\hoppscotch-app\hoppscotch>pnpm install && pnpm run generate
Scope: all 5 workspace projects
Lockfile is up-to-date, resolution step is skipped
Already up-to-date
packages/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.8s
packages/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.7s
packages/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 335ms
packages/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 projects
packages/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.9s
packages/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.2s
D:\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 projects
packages/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.1s
packages/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>
这在我的应用程序expo上起了作用(从Node.js 17降级到Node.js 12或14)。
如果你已经安装了nvm,你可以改变node的版本。
首先检查nvm中的Node.js版本。
nvm list
第二,安装12版或14版。
nvm install v12.22.8
对于Angular应用程序来说。
你也可以编辑package.json中的npm start
脚本。而不是
"start": "ng serve -o"
至
"start": "set NODE_OPTIONS=--openssl-legacy-provider && ng serve -o"
当你在终端/命令行中运行npm run start
时,它会首先设置NODE_OPTIONS
,以避免出现问题。
作为一个2022年的读者,没有一个答案涉及到这个问题在早期为Webpack 5用户修复(但没有回传到Webpack 4)。如果你使用Webpack 5,只需升级到至少5.61.0
。请看追踪这个问题的线程上的这个评论这里。
我在一个vue js项目中遇到了同样的问题。我所做的是,从机器上卸载新版本(>18)的node js,然后安装以前的版本(v16.14.2)。它可以工作
在PowerShell中。
$env:NODE_OPTIONS = "--openssl-legacy-provider"
它在Node.js v18.7.0版本中工作。
你需要将react-scripts更新到最新版本
npm update react-scripts --save
这个答案是一个即时的OpenSSL系统级的解决方法,而不需要触及先前工作的构建配置。
在理想的世界里,你有时间升级和迁移不安全的构建依赖,并确保你没有破坏你的应用程序中的其他东西(或者批发只是避免webpack,或者在我的例子中,从vue-cli迁移到vite,它使用esbuild)。
你应该(a)告诉webpack使用较新的哈希函数,或者(b)用npm audit
来减轻违规软件包的影响。
系统级的OpenSSL解决方法
最快的解决方法是通过在全系统的OpenSSL配置中启用"legacy"密码提供者来暂时重新启用MD4。
这是令人难以置信的不安全和沉重的做法。之后,你应该禁用传统的加密方法。
(不幸的是,下面的内容只在Linux上测试过,可以在Linux上使用)。
备份你现有的OpenSSL配置:
sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.BAK
添加(或取消注释)以下配置,以启用传统的"提供者"(正如OpenSSL所称)。你可能想
sudo vim /etc/ssl/openssl.cnf
或类似的。[provider_sect] default = default_sect legacy = legacy_sect [default_sect] activate = 1 [legacy_sect] activate = 1
重新运行你的节点脚本,就像以前一样。
事后禁用遗留的提供者。
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年也被RFC 6150正式列为过时的东西了。
快速修复的建议,对我来说是有效的。 cd到你做的新的App目录;你可能需要sudo this install then run the following:
。
跑步:npm install -g npm-check-updates
然后:ncu -u
然后:npm install
然后:npm start
并为大多数用户下载推荐的版本。
然后从你的电脑上卸载Node.js,并安装推荐的版本。
据我所知,这是一个来自开发团队的问题。他们会尽快解决这个问题,但与此同时,使用推荐版本,一切都会好起来的。
如果你在使用GatsbyJs时遇到这个错误,你需要做的就是将node版本降级到长期支持。没有其他救赎办法
这可能不是每个人的问题的答案。但对于在docker中运行node 17及以上版本的人来说,正如大家所说的那样,降级会有帮助。没有必要使用open-legacy-sslprovider。在你的Docker文件中简单的切换,从使用
From node
使用的是
From node:16.*
修复了docker中的这一问题。
在Dockerfile中,你应该添加。
ENV NODE_OPTIONS=--openssl-legacy-provider
我今天遇到了这个问题,并通过使用"nvm"切换Node.js的版本来解决这个问题。
我一直在做几个使用Node.js的个人项目,Next.js,和React。我经常遇到的情况是,我不记得我到底在哪个项目中使用哪个版本的Node.js。
因此,通常我会尝试为一个目前使用Node.js 14的项目使用Node.js 16(我目前在Node.js 17上)。
我还没有想出一个更好的办法来记住每个项目的Node.js版本,所以我通常会把所有需要运行的命令保存在readme.MD中,以使应用程序启动。
当我用nvm改变节点版本时,我也有同样的问题。如果Ypu在你的项目中使用sass,请尝试。
sudo npm rebuild node-sass
通过卸载openssl 1.1.1,安装openssl 3(如果你使用chocolatey:choco install openssl.light
),并将Angular更新到最新版本(目前是14),解决了Windows上的这个问题,这就解决了上述webpack配置的问题了。
当然,像大多数答案所建议的那样降低Node的等级并不是一个正确的方法。
我在更新webpack后通过更新babel-loader
的版本解决了这个错误。然而,这可能是由于另一个加载器或插件,loader-runner
出现在原始问题的控制台输出中。见评论这里
试试吧。
npm create react-app --template typescript foo --use-npm
我在Node.js 17.0.1中面临同样的问题。我通过以下步骤解决了这个问题。
打开控制面板 → 程序和功能 → Node.js,右键点击Node.js,卸载Node.js。
进入网站https://nodejs.org/en/,下载版本并进行安装。
在Angular.io项目中,Nodes.js被接受(不支持)的版本是v16.x.x。
在Nodes v17.x版本中,出现了这个问题中所描述的同样的错误。
解决办法是。
卸载节点并重新安装v16.x版本(适用于Windows系统)。
我通过使用LTS版本进行了修复。
echo "lts" > .nvmrc
nvm install
React Native有一个错误的脚本来寻找Node.js可执行文件的路径。
这将通过Node Version Manager将版本设置为Node.js的最新稳定版本。
我发现,即使Node.js在我的路径中,如果我有一个~/.nvm目录,它就会试图在nvm中找到使用而失败。这就把当前的节点设置为链接到~/.nvm中的节点,从而使React Native能够找到。
在终端(OS X)中,只需像这样降级即可。
sudo n 16.13.0
在项目文件夹中运行该命令
npm audit fix --force
它将会更新package.json文件。