首页 > 解决方案 > 运行 npm start 一直显示错误

问题描述

每次我尝试在我的 windows powershell 上为我的 react 项目运行 npm start 时,它都会不断向我显示错误

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 (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\util\createHash.js:135:53)
    at NormalModule._initBuildHash (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:417:16)
    at handleParseError (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:471:10)
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:503:5
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:358:12
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:373:3
    at iterateNormalLoaders (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:214:10)
    at iterateNormalLoaders (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\react-scripts\scripts\start.js:19
  throw err;
  ^

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 (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\util\createHash.js:135:53)
    at NormalModule._initBuildHash (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:417:16)
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:452:10
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\webpack\lib\NormalModule.js:323:13
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:367:11
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:233:18
    at context.callback (C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\loader-runner\lib\LoaderRunner.js:111:13)
    at C:\Users\user\Documents\Fashola\Web-Development\app-project\node_modules\babel-loader\lib\index.js:59:103 {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'

还有那个原因是什么:“不受支持”是什么意思?

标签: javascriptreactjscompiler-errorsframeworksnpm-start

解决方案


如果您使用的是 Webpack(从他们的堆栈跟踪中看来 OP 正在使用它)和 Node 17,则存在一些兼容性问题。节点 17从 OpenSSL 1.1更改为 3.0,并且有一些破坏性更改导致 Webpack 中的错误。这个问题似乎有几个解决方案。

选项 1:更新 Webpack。

版本5.61.0修复了这个错误。这是最简单的解决方案。

如果您使用的是 Webpack 4,开发人员无意为此版本创建错误修复。您必须更新到版本 5 或使用下面的选项 3/4。

选项 2:更新webpack.config.js.

对于webpack>=5.54,您可以手动将散列算法更改为适用于 OpenSSL 3.0 的算法。

module.exports = {
    output: {
        hashFunction: 'xxhash64'
    }
}

选项 3:降级节点。

更改为 Node 的 LTS 版本(当前为 16.x)应该可以解决这个问题。但是,这并不能解决问题,只会拖延问题。

选项 4:改变NODE_OPTIONS

对于带有 Node 17 的任何版本的 Webpack,您可以设置一个标志以恢复到旧的 OpenSSL API。这并不理想,但它有效。

# Works in *nix shells
NODE_OPTIONS='--openssl-legacy-provider' npm start

# ============================
# or (cross-platform solution)
# ============================

# requires installing `cross-env`
npm install -D cross-env

# then...
cross-env NODE_OPTIONS='--openssl-legacy-provider' npm start

推荐阅读