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にアクセスできない。
修正方法
- containerコンタイナー名を確認する
docker-compose ps
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
- containerのnetworksを確認する
docker inspect touch-api-main | grep NetworkMode "NetworkMode": "touch-api-runtime_default"
docker inspect touch-mysql-main | grep NetworkMode "NetworkMode": "touch-api-runtime_touch_mysql_network"
- networksを利用するのcontainerをチェックする。
docker network inspect <ネット名>
- container間の通信をテストする
docker exec -it <container名> ping <他のcontainer 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
の原因と対応方法
`
这个错误是由于文件系统的大小写敏感性导致的。问题的原因和解决方案如下:原因: ファイルシステムで大文字と小文字を区別するので、エラーが発生した。 対応方法は下記に記載する:
- 文件路径大小写不匹配:代码中引用的路径和实际文件系统中的路径大小写不一致。ファイルパスの大文字と小文字が一致しない:ソースに利用したのパスとシステムにパスが文字ケースが違う。
- 操作系统文件系统的大小写敏感性:macOS 默认使用大小写不敏感的文件系统,而 Linux 和某些开发工具(如 Webpack)使用大小写敏感的文件系统。macOSにデフォルトで文字ケースの区別がない、ただし、Linuxやwebpackのような文字ケースの区別がある
対応案:
修正文件名和引用:
确保文件名和所有引用该文件的地方使用完全相同的大小写。在这个案例中,检查safetyDoc
文件夹的实际名称,并在所有引用中使用正确的大小写。使用
path.resolve()
或require.resolve()
:
在 Webpack 配置中使用这些方法来解析文件路径,可以帮助避免大小写问题。配置 Webpack 忽略大小写:
在 Webpack 配置中禁用CaseSensitivePathsPlugin
。但这不推荐,因为它可能导致其他问题。使用
resolve.alias
:
在 Webpack 配置中使用resolve.alias
来明确指定正确的路径。重命名文件夹:
将SafetyDoc
文件夹重命名为safetyDoc
,使其与引用匹配。使用
git mv
命令:
如果使用 Git,可以使用git mv
命令来重命名文件,这样可以保留文件历史。git mv src/services/SafetyDoc src/services/safetyDoc
检查 Git 配置:
确保 Git 配置正确处理文件名大小写。可以设置:git config core.ignorecase false
使用 VSCode 的
search.useIgnoreFiles
设置:
在 VSCode 中,可以设置"search.useIgnoreFiles": false
来确保搜索时考虑大小写。
建议的解决步骤:
- 检查实际文件系统中
SafetyDoc
文件夹的名称。 - 如果文件夹名确实是
SafetyDoc
,则更新所有引用这个文件夹的代码,使用正确的大小写。 - 如果决定将文件夹重命名为
safetyDoc
,使用git mv
命令进行重命名。 - 更新后,重新运行构建过程,看是否解决了问题。
记住,保持文件名和引用的一致性是避免这类问题的关键。在跨平台开发时,特别要注意文件名的大小写。
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(对等依赖)的问题。这些问题主要是由于某些包所需的依赖版本与实际安装的版本不匹配造成的。以下是一些解决这些问题的建议:
更新主要依赖:
尝试更新主要的依赖包到最新版本,这可能会解决一些兼容性问题:pnpm update react react-dom antd @umijs/max umi --latest
使用
--force
选项:
使用--force
选项可以强制安装 peer dependencies,即使它们可能不完全兼容:pnpm install --force
手动解决冲突:
检查警告信息,手动安装或更新冲突的包。例如:pnpm add rc-field-form@^1.22.0
使用
resolutions
字段:
在package.json
中添加resolutions
字段来强制使用特定版本的包:json"resolutions": { "react": "^18.3.1", "react-dom": "^18.3.1", "antd": "^5.18.3" }
更新
@ant-design/charts
:@ant-design/charts
似乎需要 antd 4.x 版本,但你使用的是 5.x。尝试更新@ant-design/charts
到支持 antd 5.x 的版本:pnpm update @ant-design/charts --latest
考虑降级某些包:
如果更新不能解决问题,可能需要考虑降级某些包到兼容的版本。清理并重新安装:
有时,清理 node_modules 并重新安装所有依赖可以解决问题:pnpm store prune rm -rf node_modules pnpm install
使用兼容性工具:
考虑使用像npm-check-updates
这样的工具来帮助管理依赖版本:npx npm-check-updates
记住,解决 peer dependency 问题可能需要反复尝试不同的方法。在进行重大更改之前,请确保备份你的 package.json
文件。此外,每次更改后都要彻底测试你的应用程序,以确保一切正常工作。
4. 工具可以自动解决peer依赖项冲突
有几种方法可以帮助自动解决peer依赖项冲突:
- 使用pnpm的auto-install-peers选项:
可以通过以下命令启用pnpm自动安装peer依赖:
pnpm config set auto-install-peers true
这样pnpm会自动尝试安装缺失的peer依赖。
- 使用npm的–legacy-peer-deps选项:
npm install --legacy-peer-deps
这个选项会忽略peer依赖冲突,强制安装所有依赖。
- 使用yarn的–ignore-engines选项:
yarn install --ignore-engines
这会忽略引擎版本要求,可能解决一些peer依赖问题。
- 使用npm-check-updates工具:
npx npm-check-updates -u npm install
这个工具可以自动更新依赖到最新版本,有时可以解决冲突。
- 使用resolve-peer-dependencies包:
npm install resolve-peer-dependencies
npx resolve-peer-dependencies
这个工具专门用于解决peer依赖冲突。
- 手动在package.json中添加resolutions字段,强制使用特定版本。
需要注意的是,自动解决并不总是最佳选择,有时需要手动检查并解决冲突。建议在使用自动工具后,仍然要仔细检查依赖关系是否正确。
自動解決のはいつもベストの