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

本文详细解释了npm17及以上版本中可能出现的依赖冲突问题,如ERESOLVE和peerdependencies错误,提供了解决方案,包括更新依赖版本、使用npminstall--legacy-peer-deps、清理node_modules和网络检查等,以及针对Node.jsV17的OpenSSL3.0兼容性问题的系统和项目环境变量调整。
摘要由CSDN通过智能技术生成

前言:

一般npm报错解决

npm 17之后版本冲突的报错可能会表现为:

  1. ERESOLVE 错误:这通常发生在npm尝试解析项目依赖关系时,发现有冲突的版本要求。npm不知道应该安装哪个版本,因此无法继续。
  2. peer dependency 错误:这表示项目中有一个或多个包依赖于特定版本的另一个包,但安装的版本不满足要求。
    解决 npm 17 之后版本冲突的报错,你可以尝试以下几种方法:
  3. 更新 package.json 中的依赖版本号:确保你的 package.json 文件中所有依赖的版本号都是最新的,或者至少是已知兼容的版本。
  4. 使用 npm install --legacy-peer-deps 命令:这条命令会忽略 peerDependencies 的版本限制,可能会解决依赖冲突问题。
  5. 清空 node_modulespackage-lock.json 文件:删除 node_modules 文件夹和 package-lock.json 文件,然后重新运行 npm install
  6. 更换包管理器:试试看是否可以使用 yarnpnpm 来代替 npm,它们可能对解决依赖冲突有更好的效果。
  7. 检查网络连接:确保你的网络连接正常,并且可以访问 npm 的仓库。有时候,网络问题可能会导致依赖安装失败。
    如果上述方法都不能解决问题,那么可能需要检查项目中 package.json 中的依赖是否正确。如果可能,也可以考虑回退到 npm 的上一个版本,看看是否还存在相同的问题。

常见的npm 和node 版本对应关系

当使用npm 17或更高版本时,可能会遇到版本冲突的报错。这通常发生在以下情况:

当项目中的依赖项之间存在不兼容的版本时,npm无法解析依赖关系并会报错。
如果项目中存在peer dependencies,即某些包依赖于特定版本的另一个包,但安装的版本不满足要求,也会导致报错。
为了解决npm 17之后版本冲突的报错,可以尝试以下几种方法:

  1. 更新package.json中的依赖版本号:确保package.json文件中所有依赖的版本号都是最新的,或者至少是已知兼容的版本。这样可以确保安装的依赖版本之间不会发生冲突。
  2. 使用npm install --legacy-peer-deps命令:这条命令会忽略peerDependencies的版本限制,允许npm继续执行安装操作,可能会解决依赖冲突问题。
  3. 清空node_modulespackage-lock.json文件:删除node_modules文件夹和package-lock.json文件,然后重新运行npm install。这将重新安装项目的依赖项,并可能解决依赖冲突问题。
  4. 更换包管理器:尝试使用yarnpnpm作为替代包管理器,它们可能对解决依赖冲突有更好的效果。
  5. 检查网络连接:确保网络连接正常,并且可以访问npm的仓库。有时候网络问题可能会导致依赖安装失败。
    如果以上方法都不能解决问题,那么可能需要检查项目中package.json中的依赖是否正确。如果可能,也可以考虑回退到npm的上一个版本,看看是否还存在相同的问题。

VUE项目中运行npm run dev 报错。

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

解决方案
https://www.cnblogs.com/asplover/p/17188483.html

在这里插入图片描述
在这里插入图片描述

1、报错详情:

69% building 2056/2057 modules 1 active E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\zrender@5.4.0\node_modules\zrender\lib\tool\convert95% emitting CompressionPlugin ERROR  Error: error:0308010C:digital envelope routines::unsupported
Error: error:0308010C:digital envelope routines::unsupported
    at new Hash (node:internal/crypto/hash:71:19)
    at Object.createHash (node:crypto:133:10)
    at E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\compression-webpack-plugin@5.0.2\node_modules\compression-webpack-plugin\dist\index.js:243:42
    at CompressionPlugin.compress (E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\compression-webpack-plugin@5.0.2\node_modules\compression-webpack-plugin\dist\index.js:284:9)
    at E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\compression-webpack-plugin@5.0.2\node_modules\compression-webpack-plugin\dist\index.js:305:12
    at _next1 (eval at create (E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\tapable@1.1.3\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:14:17)
    at eval (eval at create (E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\tapable@1.1.3\node_modules\tapable\lib\HookCodeFactory.js:33:10), <anonymous>:33:1)
    at E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui\node_modules\.store\copy-webpack-plugin@5.1.2\node_modules\copy-webpack-plugin\dist\index.js:91:9       
PS E:\Shuoyun\ShuoYunSVN\项目\渠道销售管理系统\code\channel_sales-ui>

2、原因分析:

1、在node.js V17以前一些可以正常运行的的应用程序,但是在 V17 版本可能会抛出以下异常:
2、查看相关资料,大致的意思是 node版本在 17+版本后增加了OpenSSL3.0,对允许算法和密钥大小增加了严格的限制

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.__webpack_modules__.57442.module.exports (/Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:135907:62)
    at NormalModule._initBuildHash (/Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:109317:16)
    at handleParseError (/Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:109371:10)
    at /Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:109403:5
    at /Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:109258:12
    at /Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:61157:3
    at iterateNormalLoaders (/Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:60998:10)
    at Array.<anonymous> (/Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:60989:4) {
  opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
  library: 'digital envelope routines',
  reason: 'unsupported',
  code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v17.0.1
✨  Done in 1.92s.

3、解决方案:

3.1 更改系统环境变量

①Windows平台

我的电脑上右键 → 属性 → 高级系统设置 → 添加系统变量:NODE_OPTIONS = --openssl-legacy-provider

②Linux / Mac 平台

export NODE_OPTIONS=–openssl-legacy-provider

完成后,建议重新打开一个命令行窗口启动服务。

3.2 更改项目环境变量来解决

在 package.json 的 scripts 中新增:SET NODE_OPTIONS=--openssl-legacy-provider
添加前代码:

  "scripts": {
    "dev": "vue-cli-service serve",
    "build:prod": "vue-cli-service build",
    "build:stage": "vue-cli-service build --mode staging",
    "preview": "node build/index.js --preview",
    "lint": "eslint --ext .js,.vue src",
    "test:unit": "jest --clearCache && vue-cli-service test:unit",
    "test:ci": "npm run lint && npm run test:unit",
    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
  },

添加后代码:

  "scripts": {
    "dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",
    "build:prod": "vue-cli-service build",
    "build:stage": "vue-cli-service build --mode staging",
    "preview": "node build/index.js --preview",
    "lint": "eslint --ext .js,.vue src",
    "test:unit": "jest --clearCache && vue-cli-service test:unit",
    "test:ci": "npm run lint && npm run test:unit",
    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
  },

主要是将dev这一行的代码改为

 "dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",

这里需要注意的是,要是团队中的nodejs版本不一致,不要提交该 package.json 文件。

3.3 更换NodeJs版本来解决

卸载本地NodeJs环境,暗转NodeJsV17之前的版本。

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻蔚蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值