支持的浏览器和特性
支持的浏览器
默认情况下,生成的项目支持所有现代浏览器。 对 Internet Explorer 9、10 和 11 的支持需要 polyfill。 对于一组支持旧浏览器的 polyfill,请使用 react-app-polyfill。
支持的语言特性
该项目支持最新 JavaScript 标准的超集。 除了 ES6 语法特性外,它还支持:
- 指数运算符(ES2016)。
- Async/await(ES2017)。
- 对象静止/展开属性(ES2018)。
- 动态 import() (第 4 阶段提案)
- 类字段和静态属性(第 3 阶段提案的一部分)。
- JSX、流程 和 TypeScript。
了解有关 不同的提案阶段 的更多信息。
虽然我们建议谨慎使用实验性提案,但 Facebook 在产品代码中大量使用了这些功能,因此如果这些提案中的任何一个在未来发生变化,我们打算提供 codemods。
请注意,此项目默认不包含 polyfills。
如果你使用任何其他需要运行时支持的 ES6+ 功能(例如 Array.from()
或 Symbol
),请确保你是 手动包含适当的 polyfill,或者你所针对的浏览器已经支持它们。
配置支持的浏览器
默认情况下,生成的项目在 package.json
文件中包含一个 browserslist
配置,以基于全局使用 (> 0.2%
) 的广泛浏览器用于生产构建,以及现代浏览器用于开发。 这提供了良好的开发体验,尤其是在使用 async/await 等语言功能时,但仍提供与生产中许多浏览器的高度兼容性。
browserslist
配置控制输出的 JavaScript,以便发出的代码与指定的浏览器兼容。 production
列表将在通过运行 build
脚本创建生产版本时使用,而 development
列表将在运行 start
脚本时使用。 你可以使用 https://browserl.ist 查看你配置的 browserslist
支持的浏览器。
这是在 package.json
中指定的示例 browserslist
:
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
请注意,这不会自动为你包含 polyfill。 根据你支持的浏览器,你仍然需要根据需要填充语言功能(见上文)。
编辑
browserslist
配置时,你可能会注意到你的更改不会立即生效。 这是因为 babel-loader 中的问题 未检测到package.json
中的变化。 一个快速的解决方案是删除node_modules/.cache
文件夹并重试。