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项目,存在两个疑问:
- 为何react-redux会引入这些依赖?
- 部署到生产环境是否安全?
解答
一、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
相关产品推荐
相关产品推荐

