一、问题描述
前几天从git上拉下一个项目,cnpm i 安装依赖,项目跑起来后,发现有两个警告。之前这个项目都好好的,怎么突然报错了?
Warning: Accessing PropTypes via the main React package is deprecated. Use the prop-types package from npm instead. Warning: DropdownMenu: React.createClass is deprecated and will be removed in version 16. Use plain JavaScript classes instead. If you're not yet ready to migrate, create-react-class is available on npm as a drop-in replacement.
二、问题分析
facebook发布了新版本15.5.0,把{ PropTypes }从react中剥离了,需要另外引入"prop-types"。
React.createClass在16.0中将不再支持,采用es6的class方式。
然而,package中指定的react版本是15.3.2,为什么会自动安装15.5.0?
版本号组成:[主要版本号,次要版本号,补丁版本号]
因为依赖包的版本号写的是"react":"^15.3.2",^允许不会改变最左边的不为0的版本号的版本提升,也就是说,^1.0.0允许次要,补丁版本升级,^0.1.0允许补丁版本升级,^0.0.x不允许升级。所以,^15.3.2允许自动升级到15.5.0。
~指示范围,如果指定了次要版本,允许补丁版本升级,如果没有指定次要版本,允许次要版本升级。
~1.2.3 >= 1.2.3 < 1.3.0 ~1.2 >= 1.2.0 < 1.3.0
三、解决方案
1、更改安装包
把react和react-dom后面的^改成~,即可。
## 卸载react和react-dom,然后根据依赖安装指定的版本,重新启动项目即可。 npm uninstall react react-dom cnpm install
2、修改代码
// 废弃写法 import { PropTypes } from 'react'; // 推荐写法 import PropTypes from 'prop-types';