“npm run”失败并显示 ERR_OSSL_EVP_UNSUPPORTED

guy*_*oni 38 node.js npm laravel webpack

我有一个现有项目,最近安装在新设备上。
\n这是一个 Laravel + vue 项目。

\n

当我跑步时npm run watch I get the following error:

\n
> development\n> cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--watch"\n\n10% building 1/1 modules 0 active\nwebpack is watching the files\xe2\x80\xa6\n\n10% building 1/3 modules 2 active ...er/index.js??ref--5-4!/var/www/node_modules/sass-loader/lib/loader.js??ref--5-5!/var/www/resources/sass/app.scssError: error:0308010C:digital envelope routines::unsupported\n    at new Hash (node:internal/crypto/hash:67:19)\n    at Object.createHash (node:crypto:130:10)\n    at module.exports (/var/www/node_modules/webpack/lib/util/createHash.js:135:53)\n    at NormalModule._initBuildHash (/var/www/node_modules/webpack/lib/NormalModule.js:417:16)\n    at handleParseError (/var/www/node_modules/webpack/lib/NormalModule.js:471:10)\n    at /var/www/node_modules/webpack/lib/NormalModule.js:503:5\n    at /var/www/node_modules/webpack/lib/NormalModule.js:358:12\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:373:3\n    at iterateNormalLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:214:10)\n    at iterateNormalLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:221:10)\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:236:3\n    at runSyncOrAsync (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:130:11)\n    at iterateNormalLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:232:2)\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:186:6\n    at runSyncOrAsync (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:130:11)\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:178:3\n    at loadLoader (/var/www/node_modules/loader-runner/lib/loadLoader.js:47:3)\n    at iteratePitchingLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:169:2)\n    at iteratePitchingLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:165:10)\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:188:6\n    at runSyncOrAsync (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:124:12)\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:178:3\n    at loadLoader (/var/www/node_modules/loader-runner/lib/loadLoader.js:47:3)\n    at iteratePitchingLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:169:2)\n    at runLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:365:2)\n    at NormalModule.doBuild (/var/www/node_modules/webpack/lib/NormalModule.js:295:3)\n    at NormalModule.build (/var/www/node_modules/webpack/lib/NormalModule.js:446:15)\n    at Compilation.buildModule (/var/www/node_modules/webpack/lib/Compilation.js:739:10)\n    at /var/www/node_modules/webpack/lib/Compilation.js:981:14\n    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:409:6\n    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:155:13\n    at AsyncSeriesWaterfallHook.eval [as callAsync] (eval at create (/var/www/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)\n    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:138:29\n    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:346:9\n    at processTicksAndRejections (node:internal/process/task_queues:78:11)\nnode:internal/crypto/hash:67\n  this[kHandle] = new _Hash(algorithm, xofLen);\n                  ^\n\nError: error:0308010C:digital envelope routines::unsupported\n    at new Hash (node:internal/crypto/hash:67:19)\n    at Object.createHash (node:crypto:130:10)\n    at module.exports (/var/www/node_modules/webpack/lib/util/createHash.js:135:53)\n    at NormalModule._initBuildHash (/var/www/node_modules/webpack/lib/NormalModule.js:417:16)\n    at /var/www/node_modules/webpack/lib/NormalModule.js:452:10\n    at /var/www/node_modules/webpack/lib/NormalModule.js:323:13\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:367:11\n    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:233:18\n    at context.callback (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:111:13)\n    at /var/www/node_modules/babel-loader/lib/index.js:55:103 {\n  opensslErrorStack: [ \'error:03000086:digital envelope routines::initialization error\' ],\n  library: \'digital envelope routines\',\n  reason: \'unsupported\',\n  code: \'ERR_OSSL_EVP_UNSUPPORTED\'\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我使用的是 Node.js v17.3.0、npm 版本 8.3.0 和 webpack 4.41.4。

\n

mik*_*n32 67

Node.js 版本 17 已改用 OpenSSL 3.0。他们建议

\n
\n

虽然 OpenSSL 3.0 API 应该与 OpenSSL 1.1.1 提供的 API 大部分兼容,但我们确实预计由于对允许的算法和密钥大小的严格限制,会对生态系统产生一些影响。

\n

如果您ERR_OSSL_EVP_UNSUPPORTED在使用 Node.js 17 的应用程序中遇到错误,则您的应用程序或您正在使用的模块可能正在尝试使用不再允许的算法或密钥大小默认情况下使用 OpenSSL 3.0。添加了命令行选项--openssl-legacy-provider来恢复到旧版提供程序,作为这些严格限制的临时解决方法。

\n
\n

此问题已在 Webpack 版本 5 和 6 中得到解决,但没有计划将此修复向后移植到版本 4。

\n

要将--openssl-legacy-provider标志传递给 Node,您可以在命令前面加上环境变量赋值:

\n
NODE_OPTIONS=--openssl-legacy-provider npm run watch\n
Run Code Online (Sandbox Code Playgroud)\n

  • 在 Windows 命令提示符中:`set NODE_OPTIONS=--openssl-legacy-provider &amp;&amp; npm run watch` (5认同)

joh*_*nes 17

对我有用的(在 Ubuntu 22.04 上)是将其添加到 package.json 文件中:

{
  "scripts": {
    "start": "react-scripts --openssl-legacy-provider start"
  }
}
Run Code Online (Sandbox Code Playgroud)

我在 Borislav Hadzhiev 的这篇文章中找到了完整的答案:修复 - 错误:0308010C:数字信封例程::不支持


Ami*_*sia 6

如果使用 Windows Powershell,请执行以下操作:

$env:NODE_OPTIONS = '--openssl-legacy-provider'
yarn run dev
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您使用的是角度然后运行

set NODE_OPTIONS=--openssl-legacy-provider ng serve
ng serve
Run Code Online (Sandbox Code Playgroud)

运行项目