1. 解决

Could not connect to the database: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo for touchmysql failed: Name or service not known

示例:

环境

docker-compose.yml

networks:
	my-app-network:
		driver: bridge 
services:
	web: 
	networks: 
		- my-app-network 
	db: networks:
		- my-app-network # 开始没设置

表现:从web不能使用service名访问到db

排除方法

  1. 确认容器名
    1. docker-compose ps
    2. NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS touch-api-main touch-api-runtime-touchapi "/bin/sh -c /start.sh" touchapi 2 hours ago Up 2 hours 0.0.0.0:80->80/tcp, 9000/tcp touch-mysql-main touch-api-runtime-touchmysql "docker-entrypoint.s…" touchmysql 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, 33060/tcp
  2. 确认每个容器的网络
    1. docker inspect touch-api-main | grep NetworkMode "NetworkMode": "touch-api-runtime_default"
    2. docker inspect touch-mysql-main | grep NetworkMode "NetworkMode": "touch-api-runtime_touch_mysql_network"
  3. 检查网络内的容器
    1. docker network inspect <网络名称>
  4. 测试容器间通信
    1. docker exec -it <容器名> ping <另一容器IP> `

确认两容器的网络后发现属于不同的网络,再检查docker-compose.yml发现db未指定networks,导致不在同一个网络,修改即可。

2. error - ./src/pages/Basic/AnnualPlanEdit/index.tsx:16:0-107 Module not found: Error: [CaseSensitivePathsPlugin] /Users/macuser03/works/f_first/touch/touch-api-runtime/src/touch_web_user/src/services/safetyDoc/safetyAndHealth.ts does not match the corresponding path on disk SafetyDoc 的原因和解决方案

`

这个错误是由于文件系统的大小写敏感性导致的。问题的原因和解决方案如下:原因:

  1. 文件路径大小写不匹配:代码中引用的路径和实际文件系统中的路径大小写不一致。
  2. 操作系统文件系统的大小写敏感性:macOS 默认使用大小写不敏感的文件系统,而 Linux 和某些开发工具(如 Webpack)使用大小写敏感的文件系统。

解决方案:

  1. 修正文件名和引用:
    确保文件名和所有引用该文件的地方使用完全相同的大小写。在这个案例中,检查 safetyDoc 文件夹的实际名称,并在所有引用中使用正确的大小写。

  2. 使用 path.resolve() 或 require.resolve()
    在 Webpack 配置中使用这些方法来解析文件路径,可以帮助避免大小写问题。

  3. 配置 Webpack 忽略大小写:
    在 Webpack 配置中禁用 CaseSensitivePathsPlugin。但这不推荐,因为它可能导致其他问题。

  4. 使用 resolve.alias
    在 Webpack 配置中使用 resolve.alias 来明确指定正确的路径。

  5. 重命名文件夹:
    将 SafetyDoc 文件夹重命名为 safetyDoc,使其与引用匹配。

  6. 使用 git mv 命令:
    如果使用 Git,可以使用 git mv 命令来重命名文件,这样可以保留文件历史。git mv src/services/SafetyDoc src/services/safetyDoc

  7. 检查 Git 配置:
    确保 Git 配置正确处理文件名大小写。可以设置:git config core.ignorecase false

  8. 使用 VSCode 的 search.useIgnoreFiles 设置:
    在 VSCode 中,可以设置 "search.useIgnoreFiles": false 来确保搜索时考虑大小写。

建议的解决步骤:

  1. 检查实际文件系统中 SafetyDoc 文件夹的名称。
  2. 如果文件夹名确实是 SafetyDoc,则更新所有引用这个文件夹的代码,使用正确的大小写。
  3. 如果决定将文件夹重命名为 safetyDoc,使用 git mv 命令进行重命名。
  4. 更新后,重新运行构建过程,看是否解决了问题。

记住,保持文件名和引用的一致性是避免这类问题的关键。在跨平台开发时,特别要注意文件名的大小写。

3. WARN  Issues with peer dependencies found . ├─┬ dva 2.5.0-beta.2 │ ├── ✕ unmet peer react@“15.x || ^16.0.0-0”: found 18.3.1 │ ├── ✕ unmet peer react-dom@“15.x || ^16.0.0-0”: found 18.3.1 │ └─┬ react-redux 5.1.2 │ └── ✕ unmet peer react@"^0.14.0 || ^15.0.0-0 || ^16.0.0-0": found 18.3.1 ├─┬ @umijs/max 4.2.13 │ └─┬ @umijs/plugins 4.2.13 │ ├─┬ react-intl 3.12.1 │ │ └── ✕ unmet peer react@^16.3.0: found 18.3.1 │ ├─┬ @ahooksjs/use-request 2.8.15 │ │ └── ✕ unmet peer react@"^16.8.0 || ^17.0.0": found 18.3.1 │ ├─┬ @ant-design/pro-components 2.7.10 │ │ ├─┬ @ant-design/pro-form 2.28.0 │ │ │ └── ✕ unmet peer rc-field-form@^1.22.0: found 2.2.1 │ │ └─┬ @ant-design/pro-list 2.5.61 │ │ └─┬ @ant-design/pro-table 3.16.1 │ │ └── ✕ unmet peer rc-field-form@^1.22.0: found 2.2.1 │ └─┬ dva-loading 3.0.25 │ └── ✕ unmet peer dva-core@"^1.1.0 || ^1.5.0-0 || ^1.6.0-0": found 2.0.4 in

这个警告信息显示了项目中存在一些 peer dependencies(对等依赖)的问题。这些问题主要是由于某些包所需的依赖版本与实际安装的版本不匹配造成的。以下是一些解决这些问题的建议:

  1. 更新主要依赖:
    尝试更新主要的依赖包到最新版本,这可能会解决一些兼容性问题:pnpm update react react-dom antd @umijs/max umi --latest

  2. 使用 --force 选项:
    使用 --force 选项可以强制安装 peer dependencies,即使它们可能不完全兼容:pnpm install --force

  3. 手动解决冲突:
    检查警告信息,手动安装或更新冲突的包。例如:pnpm add rc-field-form@^1.22.0

  4. 使用 resolutions 字段:
    在 package.json 中添加 resolutions 字段来强制使用特定版本的包:json

    "resolutions": { "react": "^18.3.1", "react-dom": "^18.3.1", "antd": "^5.18.3" }

  5. 更新 @ant-design/charts
    @ant-design/charts 似乎需要 antd 4.x 版本,但你使用的是 5.x。尝试更新 @ant-design/charts 到支持 antd 5.x 的版本:pnpm update @ant-design/charts --latest

  6. 考虑降级某些包:
    如果更新不能解决问题,可能需要考虑降级某些包到兼容的版本。

  7. 清理并重新安装:
    有时,清理 node_modules 并重新安装所有依赖可以解决问题:pnpm store prune rm -rf node_modules pnpm install

  8. 使用兼容性工具:
    考虑使用像 npm-check-updates 这样的工具来帮助管理依赖版本:npx npm-check-updates

记住,解决 peer dependency 问题可能需要反复尝试不同的方法。在进行重大更改之前,请确保备份你的 package.json 文件。此外,每次更改后都要彻底测试你的应用程序,以确保一切正常工作。

4. 工具可以自动解决peer依赖项冲突

有几种方法可以帮助自动解决peer依赖项冲突:

  1. 使用pnpm的auto-install-peers选项:

可以通过以下命令启用pnpm自动安装peer依赖:

pnpm config set auto-install-peers true

这样pnpm会自动尝试安装缺失的peer依赖。

  1. 使用npm的–legacy-peer-deps选项:

npm install --legacy-peer-deps

这个选项会忽略peer依赖冲突,强制安装所有依赖。

  1. 使用yarn的–ignore-engines选项:

yarn install --ignore-engines

这会忽略引擎版本要求,可能解决一些peer依赖问题。

  1. 使用npm-check-updates工具:

npx npm-check-updates -u npm install

这个工具可以自动更新依赖到最新版本,有时可以解决冲突。

  1. 使用resolve-peer-dependencies包:

npm install resolve-peer-dependencies npx resolve-peer-dependencies

这个工具专门用于解决peer依赖冲突。

  1. 手动在package.json中添加resolutions字段,强制使用特定版本。

需要注意的是,自动解决并不总是最佳选择,有时需要手动检查并解决冲突。建议在使用自动工具后,仍然要仔细检查依赖关系是否正确。