簡體   English   中英

“npm run”失敗並顯示 ERR_OSSL_EVP_UNSUPPORTED

[英]"npm run" fails with ERR_OSSL_EVP_UNSUPPORTED

我有一個現有項目,最近安裝在新設備上。
它是一個 Laravel + vue 項目。

當我運行npm run watch時,出現以下錯誤:

> development
> cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js "--watch"

10% building 1/1 modules 0 active
webpack is watching the files…

10% 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
    at new Hash (node:internal/crypto/hash:67:19)
    at Object.createHash (node:crypto:130:10)
    at module.exports (/var/www/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/var/www/node_modules/webpack/lib/NormalModule.js:417:16)
    at handleParseError (/var/www/node_modules/webpack/lib/NormalModule.js:471:10)
    at /var/www/node_modules/webpack/lib/NormalModule.js:503:5
    at /var/www/node_modules/webpack/lib/NormalModule.js:358:12
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:373:3
    at iterateNormalLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
    at iterateNormalLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:236:3
    at runSyncOrAsync (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
    at iterateNormalLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:186:6
    at runSyncOrAsync (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:178:3
    at loadLoader (/var/www/node_modules/loader-runner/lib/loadLoader.js:47:3)
    at iteratePitchingLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at iteratePitchingLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:165:10)
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:188:6
    at runSyncOrAsync (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:124:12)
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:178:3
    at loadLoader (/var/www/node_modules/loader-runner/lib/loadLoader.js:47:3)
    at iteratePitchingLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:169:2)
    at runLoaders (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:365:2)
    at NormalModule.doBuild (/var/www/node_modules/webpack/lib/NormalModule.js:295:3)
    at NormalModule.build (/var/www/node_modules/webpack/lib/NormalModule.js:446:15)
    at Compilation.buildModule (/var/www/node_modules/webpack/lib/Compilation.js:739:10)
    at /var/www/node_modules/webpack/lib/Compilation.js:981:14
    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:409:6
    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:155:13
    at AsyncSeriesWaterfallHook.eval [as callAsync] (eval at create (/var/www/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:138:29
    at /var/www/node_modules/webpack/lib/NormalModuleFactory.js:346:9
    at processTicksAndRejections (node:internal/process/task_queues:78:11)
node:internal/crypto/hash:67
  this[kHandle] = new _Hash(algorithm, xofLen);
                  ^

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 (/var/www/node_modules/webpack/lib/util/createHash.js:135:53)
    at NormalModule._initBuildHash (/var/www/node_modules/webpack/lib/NormalModule.js:417:16)
    at /var/www/node_modules/webpack/lib/NormalModule.js:452:10
    at /var/www/node_modules/webpack/lib/NormalModule.js:323:13
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:367:11
    at /var/www/node_modules/loader-runner/lib/LoaderRunner.js:233:18
    at context.callback (/var/www/node_modules/loader-runner/lib/LoaderRunner.js:111:13)
    at /var/www/node_modules/babel-loader/lib/index.js:55:103 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}

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

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

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

我在 Borislav Hadzhiev 的這篇文章中找到了完整的答案: Fix - error:0308010C:digital envelope routines::unsupported

Node.js 版本 17 已切換到使用 OpenSSL 3.0。 他們建議

雖然 OpenSSL 3.0 API 應該與 OpenSSL 1.1.1 提供的 API 大部分兼容,但由於對允許的算法和密鑰大小的嚴格限制,我們確實預計會對生態系統產生一些影響。

如果您在使用 Node.js 17 的應用程序中遇到ERR_OSSL_EVP_UNSUPPORTED錯誤,則很可能您的應用程序或您正在使用的模塊正在嘗試使用 OpenSSL 3.0 默認情況下不再允許的算法或密鑰大小。 已添加命令行選項--openssl-legacy-provider以恢復為舊提供程序,作為這些嚴格限制的臨時解決方法。

這已在 Webpack 版本 5 和 6 中得到解決,但沒有計划將此修復反向移植到版本 4。

要將--openssl-legacy-provider標志傳遞給 Node,您可以在命令前加上環境變量賦值:

NODE_OPTIONS=--openssl-legacy-provider npm run watch
export NODE_OPTIONS=--openssl-legacy-provider

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM