我遇到了与子包 @intlayer/* 相关的错误
此问题通常发生在更新 Intlayer 包之后。
错误信息示例:
Error: Cannot find module '@intlayer/types'TypeError: (0 , __intlayer_config_client.colorize) is not a functionat import { colorize } from '@intlayer/config';✖ ERROR No matching export in "node_modules/@intlayer/config/dist/esm/client.mjs" for import "clearModuleCache"node_modules/@intlayer/unmerged-dictionaries-entry/dist/esm/index.mjs:3:9:3 | import { clearModuleCache, configESMxCJSRequire } from "@intlayer/config"; | ~~~~~~~~~~~~~~~~✖ 错误 在 "node_modules/@intlayer/config/dist/esm/client.mjs" 中没有匹配的导出用于导入 "configESMxCJSRequire"node_modules/@intlayer/unmerged-dictionaries-entry/dist/esm/index.mjs:3:27:3 | import { clearModuleCache, configESMxCJSRequire } from "@intlayer/config"; | ~~~~~~~~~~~~~~~~~~~~原因
基础包如 intlayer、react-intlayer、react-native-intlayer、vue-intlayer 复用了相同的子包,如 @intlayer/config、@intlayer/core、@intlayer/types,以避免代码重复。
在两个版本之间,子包的导出不保证是相同的。为限制此问题,intlayer 将子包的版本固定为主包的版本。
例如:intlayer@1.0.0 使用 @intlayer/config@1.0.0、@intlayer/core@1.0.0、@intlayer/types@1.0.0
(除了 @intlayer/swc),@intlayer/* 子包不建议直接使用。因此我们建议不要直接安装它们。
解决方案
- 确保主包和子包的版本一致。
{ "dependencies": { "intlayer": "7.0.1", "react-intlayer": "7.0.0", // 版本错误,应该是 7.0.1 }, "devDependencies": { "intlayer-editor": "7.0.1", },}- 尝试删除锁文件和 node_modules 文件夹并重新安装依赖。
有时,包管理器会在缓存的锁文件中保留子包的旧版本。为了解决这个问题,你可以尝试删除锁文件和 node_modules 文件夹,然后重新安装依赖。
rm -rf package-lock.json node_modulesnpm install- 检查全局安装
我们建议全局安装 intlayer 或 intlayer-cli 以访问 CLI 命令。如果全局版本与本地版本不一致,包管理器可能会使用错误的版本。
检查某个包是否已全局安装
npm list -g --depth=0npm list -g --depth=0 | grep intlayeryarn global listpnpm list -g --depth=0修复潜在的全局依赖冲突
npm uninstall -g intlayer intlayer-cliyarn global remove intlayer intlayer-clipnpm remove -g intlayer intlayer-cli- 尝试清理缓存
在某些环境中,如 docker、GitHub Actions 或 Vercel 等网站托管平台,可能存在缓存。您可以尝试清理缓存并重新安装。
您也可以尝试使用以下命令清理包管理器的缓存:
npm cache clean --forceyarn cache cleanpnpm cache clean