面试题答案
一键面试ES6模块兼容性现状
- Chrome:从Chrome 61版本开始,全面支持ES6模块。可以通过
<script type="module">
标签引入ES6模块,也支持import
和export
语法进行模块的导入导出。 - Firefox:Firefox 60版本开始支持ES6模块。同样支持
<script type="module">
标签以及import
和export
语法。 - Safari:Safari 11.1版本开始支持ES6模块。支持使用
<script type="module">
标签进行模块加载。 - IE:IE浏览器不支持ES6模块。无论是
<script type="module">
标签,还是import
和export
语法,在IE中均无法使用。
针对不兼容情况的优化方法
- 使用Babel转译
- 原理:Babel是一个JavaScript编译器,它可以将ES6+的代码转译为ES5代码,以确保在旧浏览器(如IE)中也能运行。
- 配置:
- 安装Babel相关依赖,如
@babel/core
、@babel/cli
、@babel/preset - env
。 - 在项目根目录创建
.babelrc
文件,配置如下:
- 安装Babel相关依赖,如
{
"presets": [
[
"@babel/preset - env",
{
"targets": {
"browsers": ["ie >= 11"]
}
}
]
]
}
- 然后在命令行中使用`babel src - d dist`(假设`src`是源文件目录,`dist`是输出目录)来转译代码。
2. 使用Webpack
- 原理:Webpack是一个模块打包工具,它可以将多个模块打包成一个或多个文件,并且在打包过程中可以利用Babel对ES6代码进行转译。
- 配置:
- 安装Webpack和相关加载器,如
webpack
、webpack - cli
、babel - loader
。 - 在项目根目录创建
webpack.config.js
文件,配置如下:
- 安装Webpack和相关加载器,如
const path = require('path');
module.exports = {
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel - loader',
options: {
presets: [
[
"@babel/preset - env",
{
"targets": {
"browsers": ["ie >= 11"]
}
}
]
]
}
}
}
]
}
};
- 然后在命令行中使用`webpack`命令进行打包。
3. 使用Polyfill
- 原理:Polyfill是一段代码(通常是JavaScript),用于实现浏览器并不支持的原生API。对于ES6模块,可以使用
es6 - module - transpiler
等工具生成Polyfill。例如,es6 - module - transpiler
可以将ES6模块转译为可以在旧浏览器中运行的代码,同时模拟import
和export
的行为。 - 使用方法:
- 安装
es6 - module - transpiler
,例如npm install es6 - module - transpiler - - save - dev
。 - 在构建过程中使用它来处理ES6模块文件,将其转译为兼容旧浏览器的代码。
- 安装