npm安装d3@5.5.0运行表现为更高版本问题咨询
问题原因
- npm版本号规则导致版本升级
你在package.json中声明的d3版本为^5.5.0,其中前缀^的规则是允许安装不改变主版本号的最新兼容版本,也就是所有5.x.x范围内的版本都符合要求。新设备执行npm install时会拉取当前5.x分支的最新正式版5.16.0,因此和你预期的5.5.0版本不一致。 - 弃用警告提前预埋
d3官方在5.x的后期维护版本中,就提前加入了v6版本的API弃用提示,event.transform的弃用警告早在5.15.x版本就已经内置,并非v6版本才首次引入,因此5.16.0版本运行时会抛出该错误提示。
解决方案
- 方案1:锁死d3版本
把package.json中devDependencies下的d3版本号改为"d3": "5.5.0"(去掉前缀^),然后删除项目根目录的node_modules文件夹和package-lock.json文件,重新执行npm install,即可严格安装指定的5.5.0版本,不会自动升级到更高的5.x版本。 - 方案2:适配新的事件传参规则(无需锁版本)
修改d3缩放事件的回调写法,将原有依赖d3.event的逻辑改为从回调参数中取事件对象:
旧写法:
.on('zoom', function() { const transform = d3.event.transform; // 原有业务逻辑 })
新写法:
.on('zoom', function(event) { const transform = event.transform; // 原有业务逻辑无需修改 })
该写法兼容d3 5.10+及所有6.x以上版本,不需要锁死版本也不会触发弃用警告。
- 方案3:强制覆盖所有d3版本(多版本冲突时使用)
如果执行npm list d3发现有其他依赖间接安装了其他版本的d3,可以在package.json根节点加入overrides配置强制全局使用指定版本:
"overrides": { "d3": "5.5.0" }
配置完成后删除node_modules和package-lock.json重新执行npm install即可。
内容的提问来源于stack exchange,提问作者JustThatGuy93
相关产品推荐
相关产品推荐

