webpack devserver配置_在webpack中使用babel
本文衔接上篇文章:
不睡觉的怪叔叔:webpack的模块热替换zhuanlan.zhihu.com
一、为什么需要Babel?
由于某些浏览器不支持ES6,所以使用ES6写的JavaScript程序不能在这些浏览器中运行。
比如index.js中写一段ES6代码:
let set = new Set();
set.add(1);
set.add(2);
set.add(3);
然后进行打包:
现在这个程序在某些不支持ES6的浏览器中是不能运行的。
可以在webpack中使用babel来将ES6代码转换为ES5的代码。
二、babel的基本配置
首先安装babel-loader与@babel/core:
然后在webpack.config.js中进行相应的配置:
webpack.config.js:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require('webpack');module.exports = {mode: 'development',devtool: 'cheap-module-eval-source-map', entry: {main: './src/index.js', },output: {filename: '[name].js', path: path.resolve(__dirname, 'dist') },plugins:[new HtmlWebpackPlugin({filename: 'dist.html', template: './src/template.html' }),new CleanWebpackPlugin(),new webpack.HotModuleReplacementPlugin() // 开启模块热替换 ],devServer: {contentBase: './dist', port: '8080', hot: true, // 开启模块热替换hotOnly: true },module: {rules: [{rules: [{test: /.(png|svg|jpg|gif)$/, use: [{loader: 'url-loader', options: {limit: 1024 }}]},{test: /.css$/,use: ['style-loader','css-loader']},{// 针对babel的配置rules: [{test: /.js$/, exclude: /node_modules/, // 无需对第三软件库进行转换,因为它们已经做了转换loader: 'babel-loader'}]}] }]}
}
三、使用preset-env实现代码转换
目前已经做好了关于Babel的基础配置,但是现在Babel还不能对代码进行转换,还需要@babel/preset-env的帮助,它才能做从ES6到ES5的转换。
那么首先要安装@babel/preset-env:
然后再配置webpack.config.js:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require('webpack');module.exports = {mode: 'development',devtool: 'cheap-module-eval-source-map', entry: {main: './src/index.js', },output: {filename: '[name].js', path: path.resolve(__dirname, 'dist') },plugins:[new HtmlWebpackPlugin({filename: 'dist.html', template: './src/template.html' }),new CleanWebpackPlugin(),new webpack.HotModuleReplacementPlugin() // 开启模块热替换 ],devServer: {contentBase: './dist', port: '8080', hot: true, // 开启模块热替换hotOnly: true },module: {rules: [{rules: [{test: /.(png|svg|jpg|gif)$/, use: [{loader: 'url-loader', options: {limit: 1024 }}]},{test: /.css$/,use: ['style-loader','css-loader']},{// 针对babel的配置rules: [{test: /.js$/, exclude: /node_modules/, // 无需对第三软件库进行转换,因为它们已经做了转换loader: 'babel-loader',options: {presets: ["@babel/preset-env"]}}]}] }]}
}
现在再打包代码:
检查打包出来的main.js可以发现ES6的let关键字被转换为ES5的var关键字:
现在已经将能转换为ES5的代码转换了,但是不支持ES6的浏览器仍然无法识别ES6的Set类,此时就要借助Babel的polyfill的帮助了。
四、使用polyfill补充代码
polyfill能为不支持ES6的浏览器补充ES6的相关代码。那么首先来安装polyfill:
然后修改index.js文件以导入polyfill补充的代码:
index.js:
import "@babel/polyfill";let set = new Set();
set.add(1);
set.add(2);
set.add(3);
现在再次打包:
此时就导入了polyfill补充的代码了,可以发现main.js文件增加到了934kb。至此就兼容了那些不支持ES6的浏览器。
五、更多配置
Babel功能非常强大,配置也非常繁杂,这里说几个简单实用的配置。
5.1、使polyfill只补充相关代码
由于polyfill除了补充与我们业务代码相关的代码外,还会补充与我们业务代码无关的代码。
比如本例中polyfill除了补充Set类相关的代码外,还会补充其他ES6相关补全代码,所以致使main.js增加到934kb。
可以手动配置,来使polyfill只补充相关的代码。
修改webpack.config.js进行配置:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require('webpack');module.exports = {mode: 'development',devtool: 'cheap-module-eval-source-map', entry: {main: './src/index.js', },output: {filename: '[name].js', path: path.resolve(__dirname, 'dist') },plugins:[new HtmlWebpackPlugin({filename: 'dist.html', template: './src/template.html' }),new CleanWebpackPlugin(),new webpack.HotModuleReplacementPlugin() // 开启模块热替换 ],devServer: {contentBase: './dist', port: '8080', hot: true, // 开启模块热替换hotOnly: true },module: {rules: [{rules: [{test: /.(png|svg|jpg|gif)$/, use: [{loader: 'url-loader', options: {limit: 1024 }}]},{test: /.css$/,use: ['style-loader','css-loader']},{// 针对babel的配置rules: [{test: /.js$/, exclude: /node_modules/, // 无需对第三软件库进行转换,因为它们已经做了转换loader: 'babel-loader',options: {presets: [["@babel/preset-env",{useBuiltIns: 'usage' // 只补充相关的代码}]]}}]}] }]}
}
index.js文件中可以不用手动导入@babel/polyfill,因为babel会自动导入:
index.js:
let set = new Set();
set.add(1);
set.add(2);
set.add(3);
再次打包:
可以发现main.js缩减为192kb。
5.2、指定适配的浏览器版本
可以指定适配的浏览器版本,以使Babel针对该浏览器版本进行ES6到ES5的转换。
配置webpack.config.js:
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require('webpack');module.exports = {mode: 'development',devtool: 'cheap-module-eval-source-map', entry: {main: './src/index.js', },output: {filename: '[name].js', path: path.resolve(__dirname, 'dist') },plugins:[new HtmlWebpackPlugin({filename: 'dist.html', template: './src/template.html' }),new CleanWebpackPlugin(),new webpack.HotModuleReplacementPlugin() // 开启模块热替换 ],devServer: {contentBase: './dist', port: '8080', hot: true, // 开启模块热替换hotOnly: true },module: {rules: [{rules: [{test: /.(png|svg|jpg|gif)$/, use: [{loader: 'url-loader', options: {limit: 1024 }}]},{test: /.css$/,use: ['style-loader','css-loader']},{// 针对babel的配置rules: [{test: /.js$/, exclude: /node_modules/, // 无需对第三软件库进行转换,因为它们已经做了转换loader: 'babel-loader',options: {presets: [["@babel/preset-env",{useBuiltIns: 'usage', // 只补充相关的代码targets: {chrome: '67' // 指定适配的浏览器版本}}]]}}]}] }]}
}
5.3、将配置项单独放在一个文件中
当Babel配置的中的opions项中的配置越来越多时,最好使用单独的文件来放置这些配置。
在webpack-demo根目录中创建一个文件.babelrc,并将options中的内容放进去:
.babelrc:
{presets: [["@babel/preset-env",{useBuiltIns: 'usage', // 只补充相关的代码targets: {chrome: '67' // 指定适配的浏览器版本}}]]
}
再次打包:
配置生效!
webpack devserver配置_在webpack中使用babel相关推荐
- 结合webpack配置_前端 Webpack 工程化的最佳实践
作者 | 阿里文娱前端开发专家 芃苏责编 | 屠敏头图 | CSDN 下载自视觉中国 引言 ▐ 前端构建工具的演变 回想在2015-2016年的时候,开发者们开始渐渐把视线从大量使用Task Runn ...
- webpack打包原理_对于webpack打包原理你知道有多少?
什么是 webpack ? 本质上,webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler).当 webpack 处理应用程序时,它会递归地构建一个依 ...
- webpack devserver配置_webpack中webpack-dev-server的contentBase和index属性实测
在配置webpack时,在webpack-dev-server的配置中有这样两个属性contentBase和index.例子如下(同时配有官方文档): devServer: {host: '127.0 ...
- webpack初体验_使用webpack打包js文件_json文件_使用webpack开发模式_生产模式打包---webpack工作笔记003
我们首先去初始化一下npm npm init 然后package name 输入webpack_test 然后初始化npm以后,我们去 安装npm i webpack webpack-cli -g 全 ...
- asp.net 获取计算机配置_智能制造中的计算机视觉应用瓶颈问题
点击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文摘自于:雷林建, 孙胜利, 向玉开, 张悦, 刘会凯. 202 ...
- java tomcat 404配置_在Tomcat中配置404自定义错误页面详解
一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这样的页面的, 问题的出发点是我在Struts2中定义错误页面, 在Struts2中是这 ...
- team网卡配置_在CentOS7中配置网路成组(Network Team)
之前写了一篇网络成组的文章,使用的是nmtui图形界面配置,但JSON字符串输入很繁琐.因此,建议nmcli进行配置.另外,在CentOS7中推荐网络成组的方式替代以往的网卡绑定,对于具体的操作在红帽 ...
- nmi中断配置_关于单片机中的NMI_Handler(不可屏蔽中断处理器)
该博客文章以MKL15Z4系列单片机为例,参考文档均来自NXP官方提供的芯片用户手册和数据手册:所使用的的开发环境是MCUXpresso. 一.简单的介绍 首先请看两张截图: 一张是截取于单片机工程的 ...
- 三.webpack基本配置
webpack基本配置 1.关于webpack.config.js 首先我们先建立这样的目录 文件说明: src : 放置源文件的目录 dist : 放置打包后文件的目录 index.html : 初 ...
最新文章
- 20. matlab 中的gtext 函数
- netbeans 添加gif图片_怎么制作动态图片?手机如何制作清晰gif动图?
- 8核移动处理器时代来临
- Javapinyin4J实现中文名转拼音
- 如何在友好的情景下向用户索取手机权限?
- Lesson 4.34.4 梯度下降(Gradient Descent)基本原理与手动实现随机梯度下降与小批量梯度下降
- ipad怎么连接电脑_蓝牙的使用,蓝牙耳机怎么连接手机,怎么连接电脑
- TOPAS 命令详解
- 一步一步学Ruby(十一):控制语句
- py获取前端的参数_微前端 qiankun 项目实践
- Xtreme8.0 - Kabloom dp
- 【conda】解决 An HTTP error occurred when trying to retrieve this URL.
- 要显示的8个字符已存放在以BUF开始的存储区单元中(称为显示缓冲区),依次送到LED显示器中显示。CPU通过P0口和P2口控制8位LED显示器,LED为共阴极显示器。
- PCA原理及代码实现
- 论文中三线式表格的快速插入(word)
- 字符常量与字符串常量
- 通过YYtext实现文本点击(类似微博效果)
- [贪心][区间dp]Zero-One Codeforces1733D1D2
- 激活Windows Vista Home Basic Aero玻璃效果
- 【PMP认证考试感悟】走向管理的开始
热门文章
- asp.net web submit链接页面_41. Web 安全之 target=quot;_blankquot; 触发钓鱼风险
- 贪心算法——洛谷(P3817)小A的糖果
- PAT乙级(1014 福尔摩斯的约会)
- PAT乙级(1006 换个格式输出整数)
- MySQL亿级数据数据库优化方案测试-银行交易流水记录的查询
- 2019年5月数据库流行度排行:老骥伏枥与青壮图强
- Scrum Master们,难道每天都在摸鱼?
- 多语言ASR?没有什么听不懂,15种语言我全都要
- 4种语义分割数据集Cityscapes上SOTA方法总结
- 【华为云技术分享】Entity Framework Core 捕获数据库变动