Skip to content

常见问题

信息

本章收录开发过程中项目遇到的疑难杂症

商城后管项目启动报错 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.访问仓库下载压缩包 efwdgwe0b7

  • 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