dvajs / dva

🌱 React and redux based, lightweight and elm-style framework. (Inspired by elm and choo)
https://dvajs.com/
MIT License
16.24k stars 3.17k forks source link

"immer": "^8.0.4",版本过低,扫描有安全问题,能不能升级一下到9.0.6 #2491

Open weiweipeng opened 2 years ago

weiweipeng commented 2 years ago

What happens?

最小可复现仓库

请使用 yarn create umi 创建,选择 app,然后选上 dva,并上传到你的 GitHub 仓库

复现步骤,错误日志以及相关配置

相关环境信息

weiweipeng commented 2 years ago

希望能升级啊

geekact commented 2 years ago

一方面可以在package.json中强制指定immer

{
  "dependencies": {
    "dva-immer": "^1.0.0"
  },
  "resolutions": {
    "dva-immer/immer": "^9.0.6"
  }
}

另一方面,考虑弃坑 #2490

weiweipeng commented 2 years ago

我试过了,这个方法不行呢!我用的是umi框架,里面直接内嵌dva,坑死

geekact commented 2 years ago

如果直接依赖不是dva-immer,则需要一层层传递下去,

{
  "你的依赖/中间依赖a/b/c/immer": "^9.0.6"
}

中间依赖需要你自己去yarn.lock文件中找

weiweipeng commented 2 years ago

试过了大佬的方法,.lock文件版本已经到9.0.6,但是node_modules immer版本还是8.0.4

geekact commented 2 years ago

试过了大佬的方法,.lock文件版本已经到9.0.6,但是node_modules immer版本还是8.0.4

不,你要看目录 node_modules/dva-immer/node_modules/immer 里的版本号,其实是已经成功切换到指定版本了。

{
  "resolutions": {
    "umi-plugin-react/umi-plugin-dva/dva-immer/immer": "^9.0.6"
  }
}
weiweipeng commented 2 years ago

试过了大佬的方法,.lock文件版本已经到9.0.6,但是node_modules immer版本还是8.0.4

不,你要看目录 node_modules/dva-immer/node_modules/immer 里的版本号,其实是已经成功切换到指定版本了。

{
  "resolutions": {
    "umi-plugin-react/umi-plugin-dva/dva-immer/immer": "^9.0.6"
  }
}

一切都是以node_modules/dva-immer/node_modules/immer版本号为主,lock文件夹里面的版本号不能作为依据?

geekact commented 2 years ago

你可能不太清楚require的规则 http://nodejs.cn/api/modules/loading_from_node_modules_folders.html

然后就是umi项目里,依赖到immer的地方太多,各个immer版本都有,所以lock文件里应该是有很多immer的并且都不兼容

yarn why immer
weiweipeng commented 2 years ago

你可能不太清楚require的规则 http://nodejs.cn/api/modules/loading_from_node_modules_folders.html

然后就是umi项目里,依赖到immer的地方太多,各个immer版本都有,所以lock文件里应该是有很多immer的并且都不兼容

yarn why immer

嗯嗯,是的,dva-immer里面的immer插件还是不行,那边依赖的8.0.4版本直接按需下载在dva-immer的node_modules,好像没办法强行修改它的依赖

geekact commented 2 years ago

你可能不太清楚require的规则 http://nodejs.cn/api/modules/loading_from_node_modules_folders.html 然后就是umi项目里,依赖到immer的地方太多,各个immer版本都有,所以lock文件里应该是有很多immer的并且都不兼容

yarn why immer

嗯嗯,是的,dva-immer里面的immer插件还是不行,那边依赖的8.0.4版本直接按需下载在dva-immer的node_modules,好像没办法强行修改它的依赖

还有一个办法就是把所有用到immer的库都加入到resolutions强行升级,这样肯定只有一个immer。 另外考虑弃坑

weiweipeng commented 2 years ago

你可能不太清楚require的规则 http://nodejs.cn/api/modules/loading_from_node_modules_folders.html 然后就是umi项目里,依赖到immer的地方太多,各个immer版本都有,所以lock文件里应该是有很多immer的并且都不兼容

yarn why immer

嗯嗯,是的,dva-immer里面的immer插件还是不行,那边依赖的8.0.4版本直接按需下载在dva-immer的node_modules,好像没办法强行修改它的依赖

还有一个办法就是把所有用到immer的库都加入到resolutions强行升级,这样肯定只有一个immer。 另外考虑弃坑 "resolutions": { "plugin-dva/dva-immer/immer": "^9.0.6", "immer": "^9.0.6", "isomorphic-fetch/node-fetch": "^3.1.1", "node-fetch": "^3.1.1" }, 试过了,还是不行,内部嵌入依赖好像没办法强行修改,弃坑是来不及了,项目都要上架了,太难了,这个坑挖的,umi框架能不能在运行时去掉,只安装node相关的?

geekact commented 2 years ago

你这个resolutions写的。。。plugin-dva是你自己装的吗? 我昨天创建的umi项目,按照这个配置,可以把所有immer统一到9.0.6

{
  "resolutions": {
    "umi-plugin-react/umi-plugin-dva/dva-immer/immer": "^9.0.6",
    "umi/umi-ui/react-dev-utils/immer": "^9.0.6",
    "umi-plugin-react/umi-plugin-ui/immer": "^9.0.6",
    "umi/umi-build-dev/umi-plugin-ui/immer": "^9.0.6"
  }
}

然后lock文件会呈现出下面的状态

# yarn.lock

immer@1.10.0, immer@^2.1.1, immer@^5.0.0, immer@^9.0.6:
  version "9.0.14"
  resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.14.tgz#e05b83b63999d26382bb71676c9d827831248a48"
  integrity sha512-ubBeqQutOSLIFCUBN03jGeOS6a3DoYlSYwYJTa+gSKEZKU5redJIqkIdZ3JVv/4RZpfcXdAWH5zCNLWPRv2WDw==

如果还不行,说明你的其它插件里也带了immer,需要你在yarn.lock里找到并写进resolutions。记住,开头必须是你自己装的插件

weiweipeng commented 2 years ago

谢谢大佬,之前大概是用npm,改成了yarn就好了

geekact commented 2 years ago

新项目考虑换成这个库,带你飞:https://github.com/foca-js/foca

weiweipeng commented 2 years ago

新项目考虑换成这个库,带你飞:https://github.com/foca-js/foca

可以的,下次项目试试大佬的,以后再也不用这个库了,太坑了!