常见问题
信息
本章收录开发过程中项目遇到的疑难杂症
商城后管项目启动报错 Error: error:0308010C:digital envelope routines::unsupported
在商城模板的项目启动。如果版本 nodejs > 16
运行 npm run dev
等命令时报错
node:internal/crypto/hash:69
this[kHandle] = new _Hash(algorithm, xofLen);
^
Error: error:0308010C:digital envelope routines::unsupported
at new Hash (node:internal/crypto/hash:69:19)
at Object.createHash (node:crypto:133:10)
at BulkUpdateDecorator.hashFactory (D:\B01_mm-frontends\mm-frontend_shop\node_modules\.pnpm\@umijs+deps@3.5.37\node_modules\@umijs\deps\compiled\webpack\5\bundle5.js:184154:18)
at BulkUpdateDecorator.update (D:\B01_mm-frontends\mm-frontend_shop\node_modules\.pnpm\@umijs+deps@3.5.37\node_modules\@umijs\deps\compiled\webpack\5\bundle5.js:184055:50)
at D:\B01_mm-frontends\mm-frontend_shop\node_modules\.pnpm\@umijs+deps@3.5.37\node_modules\@umijs\deps\compiled\webpack\5\bundle5.js:107101:9
at processTicksAndRejections (node:internal/process/task_queues:82:21)
at runNextTicks (node:internal/process/task_queues:64:3)
at processImmediate (node:internal/timers:447:9) {
opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
library: 'digital envelope routines',
reason: 'unsupported',
code: 'ERR_OSSL_EVP_UNSUPPORTED'
}
Node.js v18.20.8
ELIFECYCLE Command failed with exit code 1.
原因解析
Node.js 17+ 默认使用 OpenSSL 3.0,但某些旧项目(如 Webpack 4 或基于 Vue CLI 的项目)可能需要回退到旧版 OpenSSL 提供程序。
解决方案
二选一
1.降级nodejs至 16.x
2.修改启动命令
bash
"uat": "cross-env REACT_APP_ENV=uat NODE_OPTIONS=--openssl-legacy-provider umi build",
"build": "cross-env REACT_APP_ENV=prod NODE_OPTIONS=--openssl-legacy-provider umi build",
"start": "cross-env REACT_APP_ENV=dev NODE_OPTIONS=--openssl-legacy-provider MOCK=none UMI_ENV=dev umi dev",
Cannot find module 'umi-plugin-auto-route'
安装项目时出现 Error:Cannot find module 'umi-plugin-auto-route' 等提示错误
原因
这是库是公司私有仓库的插件包。自身是依赖 lock文件安装的。但是有些项目lock文件异常(比如: pnpm 版本不匹配导致lock文件被忽略)。在安装时没有使用lock文件进行安装。内部去 npm仓库安装出现的 404错误
解决方式
这种情况分不同情况处理
本地项目components下面有 umi-plugin-auto-route 文件夹
将 package.json种的 依赖 修改为 workspace。执行安装
json
"umi-plugin-auto-route":"^1.0.11",
// 修改为
"umi-plugin-auto-route":"workspace:^",
指定仓库安装
bash
// filter 后面替换为项目包名
pnpm install umi-plugin-auto-route --registry=http://47.103.40.50:3200/ --filter @wmeimob/backend-template
本地项目没有这个包
下载项目包并安装
1.访问仓库下载压缩包
2.解压压缩包并将文件放到项目根目录下的 components 中并重命名为 umi-plugin-auto-route
3.修改安装依赖为 workspace
4.执行安装 pnpm install
ERR_PNPM_FETCH GET http://47.103.40.50:3200/@wmeimob/xxx: Not Found - 404
原因
这个问题是部分项目被修改为本地依赖。远程仓库已经删除导致的
解决
修改项目package.json中依赖为 workspace 再重新 pnpm install
json
"@wmeimob/xxx":"^1.0.11",
// 修改为
"@wmeimob/xxx":"workspace:^",
ERROR: Failed to download Chromium r686378! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download
安装项目依赖报错
bash
ERROR: Failed to download Chromium r686378! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
Error: connect ECONNREFUSED 127.0.0.1:443
at TCPConnectwrap.afterConnect [as oncomplete] (node:net:1157:16)
-- ASYNC --
at BrowserFetcher.<anonymous> (E:\code\weimob\zxyd\Lxeo1193-zhongxinpinggu-manage\node_modules\.pnpm\puppeteer@1.20.0\node_modules\puppeteer\lib)
原因
npm镜像地址从 taobao变更为 npmmirror。部分文件需要修改
解决
在项目根目录的 .npmrc
文件中(如果没有自己创建)添加以下语句
bash
// .npmrc
puppeteer-download-host=https://cdn.npmmirror.com/binaries