错误解决
- 前言:
- 一般`npm`报错解决
- 常见的npm 和node 版本对应关系
- 1、报错详情:
- 2、原因分析:
- 3、解决方案:
- 3.1 更改系统环境变量
- 3.2 更改项目环境变量来解决
- 3.3 更换NodeJs版本来解决
前言:
一般npm
报错解决
npm 17
之后版本冲突的报错可能会表现为:
ERESOLVE
错误:这通常发生在npm尝试解析项目依赖关系时,发现有冲突的版本要求。npm不知道应该安装哪个版本,因此无法继续。peer dependency
错误:这表示项目中有一个或多个包依赖于特定版本的另一个包,但安装的版本不满足要求。
解决npm 17
之后版本冲突的报错,你可以尝试以下几种方法:- 更新
package.json
中的依赖版本号:确保你的package.json
文件中所有依赖的版本号都是最新的,或者至少是已知兼容的版本。 - 使用
npm install --legacy-peer-deps
命令:这条命令会忽略peerDependencies
的版本限制,可能会解决依赖冲突问题。 - 清空
node_modules
和package-lock.json
文件:删除node_modules
文件夹和package-lock.json
文件,然后重新运行npm install
。 - 更换包管理器:试试看是否可以使用
yarn
或pnpm
来代替npm
,它们可能对解决依赖冲突有更好的效果。 - 检查网络连接:确保你的网络连接正常,并且可以访问
npm
的仓库。有时候,网络问题可能会导致依赖安装失败。
如果上述方法都不能解决问题,那么可能需要检查项目中package.json
中的依赖是否正确。如果可能,也可以考虑回退到npm
的上一个版本,看看是否还存在相同的问题。
常见的npm 和node 版本对应关系
当使用npm 17或更高版本时,可能会遇到版本冲突的报错。这通常发生在以下情况:
当项目中的依赖项之间存在不兼容的版本时,npm无法解析依赖关系并会报错。
如果项目中存在peer dependencies
,即某些包依赖于特定版本的另一个包,但安装的版本不满足要求,也会导致报错。
为了解决npm 17之后版本冲突的报错,可以尝试以下几种方法:
- 更新
package.json
中的依赖版本号:确保package.json
文件中所有依赖的版本号都是最新的,或者至少是已知兼容的版本。这样可以确保安装的依赖版本之间不会发生冲突。 - 使用
npm install --legacy-peer-deps
命令:这条命令会忽略peerDependencies
的版本限制,允许npm继续执行安装操作,可能会解决依赖冲突问题。 - 清空
node_modules
和package-lock.json
文件:删除node_modules
文件夹和package-lock.json
文件,然后重新运行npm install
。这将重新安装项目的依赖项,并可能解决依赖冲突问题。 - 更换包管理器:尝试使用
yarn
或pnpm
作为替代包管理器,它们可能对解决依赖冲突有更好的效果。 - 检查网络连接:确保网络连接正常,并且可以访问
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::unsupportedat 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:42at 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:12at _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:67this[kHandle] = new _Hash(algorithm, xofLen);^Error: error:0308010C:digital envelope routines::unsupportedat 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:5at /Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:109258:12at /Users/workspace/React/umiapp/node_modules/@umijs/deps/compiled/webpack/4/bundle4.js:61157:3at 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之前的版本。