You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Redux含废弃依赖是否合规?非RN项目为何引入RN依赖?

问题描述

运行npm ci时收到以下废弃库的警告:

@babel/plugin-proposal-numeric-separator
@babel/plugin-proposal-class-properties
@babel/plugin-proposal-optional-catch-binding
@babel/plugin-proposal-nullish-coalescing-operator
@babel/plugin-proposal-optional-chaining
@babel/plugin-proposal-async-generator-functions
@babel/plugin-proposal-object-rest-spread
uglify-es

对其中一个库执行npm ls得到依赖链:

vite-platform@0.0.0 /Users/me/Documents/experimental/vite-platform
└─┬ react-redux@8.1.3
  └─┬ react-native@0.72.6
    ├─┬ @react-native-community/cli@11.3.7
    │ └─┬ @react-native-community/cli-plugin-metro@11.3.7
    │   └─┬ metro-react-native-babel-transformer@0.76.8
    │     └─┬ metro-react-native-babel-preset@0.76.8
    │       └── @babel/plugin-proposal-nullish-coalescing-operator@7.18.6 d

项目基于Vite和React构建,并非React Native项目,存在两个疑问:

  1. 为何react-redux会引入这些依赖?
  2. 部署到生产环境是否安全?
解答

一、react-redux引入React Native依赖的原因

  • react-redux从v8.x版本开始,为了同时兼容React Web和React Native场景,将React Native相关包设为可选依赖(optionalDependencies)。但npm默认会尝试安装可选依赖,导致你的纯Web项目意外拉取了React Native的整套工具链,进而引入了那些废弃的Babel插件和uglify-es。
  • 这些依赖并非react-redux核心功能必需项,只是为适配React Native生态存在,对纯Web项目完全冗余。

二、生产环境安全性分析

  • 废弃库风险:这些废弃的Babel插件已被合并到Babel核心预设(如@babel/preset-env)中,不再单独维护,但当前版本无已知安全漏洞;uglify-es虽被terser替代,同样无高危安全问题,但停止维护意味着未来出现漏洞不会被修复。
  • 生产构建影响:你的项目基于Vite构建,生产打包会使用Vite自带的Rollup/esbuild工具链,不会调用React Native的Metro打包器或这些废弃插件。这些冗余依赖仅存在于开发依赖树中,不会被打包到生产环境的最终代码里。
  • 结论:部署到生产环境是安全的,但建议清理冗余依赖以消除警告、减少依赖体积。

清理冗余依赖的建议

  • 执行npm install --no-optional重新安装依赖,跳过可选依赖的安装,避免拉取React Native相关包。

内容的提问来源于stack exchange,提问作者Beikeni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 10:05:07