react-router-dom引入报错createLocation未从history导出的版本冲突问题
相同依赖版本组合新旧环境运行表现差异的原因
./node_modules/react-router-dom/esm/react-router-dom.js
Attempted import error : 'createLocation' is not exported from 'history'.
你遇到的报错本质是react-router-dom 5.2.0不兼容history 5.x版本,但现有环境能正常运行,通常是以下几种原因:
- lock文件不一致:现有环境存在
package-lock.json或yarn.lock文件,该文件会固定所有依赖的安装路径和版本提升规则。现有环境的lock文件大概率将react-router-dom自身依赖的history 4.x版本,单独安装在了node_modules/react-router-dom/node_modules目录下,不会用到顶层你显式安装的history 5.0.0。如果迁移到新服务器时你只复制了package.json,没有同步lock文件,新环境执行npm install时会重新计算依赖树,将顶层的history 5.0.0提供给react-router-dom调用,就会触发报错。你可以在现有环境执行npm list history验证,输出结果中会同时存在两个history版本。 - 依赖安装参数差异:如果现有环境之前安装依赖时使用了
--force、--legacy-peer-deps等特殊参数,或是逐步单独安装过依赖,会生成和新环境直接执行npm install完全不同的依赖树结构。 - 本地修改未同步:现有环境可能对node_modules下的react-router-dom或history包做过临时修改,或是存在npm缓存的旧编译产物,没有同步到新环境,导致两边实际运行的依赖代码不一致。
复现现有环境依赖的方案
直接将现有环境的package-lock.json文件复制到新服务器项目目录下,执行以下命令安装即可完全复现现有环境的依赖结构:
npm cache clean --force rm -rf node_modules npm ci
npm ci命令会严格按照lock文件的配置安装依赖,不会重新计算依赖树,能保证和现有环境完全一致。
内容的提问来源于stack exchange,提问作者Christian R
相关产品推荐
相关产品推荐

