webpack4.x下babel的安装、配置及使用

2023-11-02

前言

目前,ES6(ES2015)这样的语法已经得到很大规模的应用,它具有更加简洁、功能更加强大的特点,实际项目中很可能会使用采用了ES6语法的模块,但浏览器对于ES6语法的支持并不完善。为了实现兼容,就需要使用转换工具对ES6语法转换为ES5语法,babel就是最常用的一个工具。那么在webpack中如何使用babel呢?这是本篇文章要探讨的问题。
  写这篇文章的目的还在于最新webpack版本的一些操作方式已经变化、babel也在不断更新,以往的一些资料或者教程已不适合。笔者对webpack最新版4.1.1下使用babel进行了探索,现将结果总结为本文,以下经测试通过可行,读者可参考设置。
  限于作者水平,如有错误之处实属正常,诚邀指正!

文章用例

为更加清楚的进行阐述,本文使用一个案例,如下:
  1、项目根目录为webpack-test,当然这个名字可以随意;
  2、在项目根目录下,有一个index.js文件,代码如下:
这里写图片描述
  3、index.js所引入的a.js文件采用了ES6语法的箭头函数,代码如下:
这里写图片描述
  4、最终打包成dist目录下的main.js文件,同时dist目录下有一个index.html文件引入main.js的脚本,index.html文件内容如下:
这里写图片描述

一、安装babel-loader、babel-core、babel-preset-env

这三个文件都是必需的,但彼此的作用各不相同。
  首先,babel-loader作为webpack的loader的一种,作用同其他loader一样,实现对特定文件类型的处理。webpack官方文档中指出了loader的作用,即:

loader 让 webpack 能够去处理那些非 JavaScript 文件(webpack 自身只理解
JavaScript)。loader 可以将所有类型的文件转换为 webpack 能够处理的有效模块,然后你就可以利用 webpack的打包能力,对它们进行处理。

虽然webpack本身就能够处理.js文件,但无法对ES2015+的语法进行转换,babel-loader的作用正是实现对使用了ES2015+语法的.js文件进行处理。
  要使用babel,首先要安装babel-loader,命令行中定位到项目根目录输入以下指令进行安装:

npm install -D babel-loader

笔者这里安装完成后显示版本是babel-loader@7.1.4。
  第二,babel-core的作用在于提供一系列api。这便是说,当webpack使用babel-loader处理文件时,babel-loader实际上调用了babel-core的api,因此也必须安装babel-core:

npm install -D babel-core

笔者安装完成显示版本为babel-core@6.26.0。
  第三,babel-preset-env的作用是告诉babel使用哪种转码规则进行文件处理。事实上,babel有几种规则都可以实现对ES6语法的转码,如babel-preset-es2015、babel-preset-latest、babel-preset-env,不过官方现已建议采用babel-preset-env,本文也将采用babel-preset-env,你可以通过官网了解几种规则的区别。同样在命令行中定位到项目根目录,输入以下指令进行安装:

npm install -D babel-preset-env

笔者安装的版本是babel-preset-env@1.6.1。

二、配置babel 规则##

上面仅仅是安装了三个包,如果要使babel起作用,便需要配置babel规则。
  第一种方式是通过package.json。在package.json文件中增加一个“babel"属性,该属性是一个JSON对象,作用是设置项目中的babel转码规则和使用到的babel插件,其基本格式如下:

"babel":{
  "presets": [],
  "plugins": []
}

''presets"属性字段设定转码规则,“plugins"属性设置使用到的插件。在本项目中只需将"babel"属性 的"presets”:设置为[“env”]即可,如下所示:

"babel":{
  "presets": ["env"]
}

上面的设置告诉npm本项目将使用babel,并且使用bable-preset-env规则进行转码,即实现对ES2015+语法进行转码。
  除此之外,还有第二种方式,即通过.babelrc文件。在项目根目录下新建.babelrc文件,里面只需输入第一种方式中"babel"属性的值即可:

{
  "presets": ["env"]
}

作用和第一种方式相同。

三、建立并配置webpack.config.js文件##

仅有上面仍然不能起作用,虽然上面已经配置好babel的规则,但webpack仍然不知道何时使用该规则,这便需要使用webpack.config.js文件。
  这个文件的作用是对webpack打包的参数进行配置。我的第一篇关于webpack4.x的文章《webpack4.x开发环境配置》中已经提到,webpack4.x中webpack.config.js这样的配置文件不是必须的,但事实上,如果想要进行更加个性化的打包配置,仍然要使用该文件。在根目录下新建webpack.config.js文件,在其中输入:

module.exports={
	module:{
		rules:[
			{
				test: /\.js$/,
				 exclude: /node_modules/, 
				 loader: "babel-loader"
			}
		]
	}

}

这就告诉webpack打包时,一旦匹配到.js文件就使用babel-loader进行处理,如前文所述,babel-loader调用babel-core的api使用bable-preset-env的规则进行转码。这里并没有使用entry、output这样的参数,这是webpack4.x有默认的入口和出口,本项目无须改变,因此便不必进行设置。

四、运行查看结果

假使你已经在package.json文件的"scripts"属性下增加了"build"属性,即

"build": "webpack --mode production --progress --display-modules --colors --display-reasons"

现在,在命令行定位到项目根目录,执行

npm run build

这就相当于执行"build"属性对应的脚本。
  现在,webpack开始进行打包,当打包完成后,用浏览器打开dist目录下的index.html查看结果,可以发现弹出两次弹窗

第一次是"hello world",第二次是"2,3,4"

这表明a.js中的arrowTest()函数成功执行,打开main.js查看打包后的代码,也可以发现箭头函数部分的代码已经被转换成ES5的语法,如下:

[1,2,3].map(function(r){return r+1})

这表明整个babel的配置及使用已经成功。

当然,以上只是最基本的配置和使用,如果要应对更加复杂的情况,只需要参照官方文档对相关参数进行修改,这并不是什么难事,完!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

webpack4.x下babel的安装、配置及使用 的相关文章

随机推荐

  • vue + element-ui el-form-item循环校验及 el-table和el-form表单校验嵌套使用

    vue element ui el form item循环校验及 el table和el form表单校验嵌套使用 第一种 可以无限循环无限嵌套 支持同步异步 更加灵活 拓展性更强 另一种 每个form item都当成一个form 然后循环
  • makefile学习2

    变量赋值 基本赋值 与位置无关 可能被后面的语句改变 覆盖之前的值 与位置有关 是如果没有被赋值过就赋予等号后面的值 是添加等号后面的值 strip函数 strip STRINT 函数名称 去空格函数 strip 函数功能 去掉字串 若干单
  • 阿里钉钉Android实习面试也太太太太难了吧,对算法的要求堪比字节

    本人研究生在读 在2月26日找了师兄内推阿里钉钉团队 28号接到了约1面的电话 幸好我提前准备了一个多月的样子 刷面试题 刷LeetCode 面了之后才觉得自己刷少了 对于我这样一个实习生来说题目还是有些偏难 不过在4月20号终于拿到意向书
  • 对话MVP

    换位思考 我想到通过知识分享来帮助更多开发者解决开发细节问题 林宣名 开源社区成立以来 吸引汇聚了许多热爱分享 交流的技术爱好者 为感谢大家一路以来对FISCO BCOS的支持与贡献 社区开放FISCO BCOS MVP认定 以鼓励为开源社
  • MySQL-SQL InnoDB引擎 (下)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • 2023最新软件测试面试题大全(包含答案)

    前言 在我认为 对于测试面试以及进阶的最佳学习方法莫过于刷题 博客 书籍 视频 总结 前几者博主将淋漓尽致地挥毫于这篇博客文章中 至于总结在于个人 实际上越到后面你会发现面试并不难 其次就是在刷题的过程中有没有去思考 刷题只是次之 这又是一
  • vue json数据可视化展示

    使用vue json viewer插件 官网地址 https www npmjs com package vue json viewer 安装vue json viewer插件 npm install vue json viewer sav
  • 文件映射mmap简单设置文件大小(lseek (ftruncate可以设置文件大小))__使用mmap即文件映射实现文件的快速复制代码

    lseek fd pagesize 10 100 SEEK SET lseek应该是文件指针移动到的位置 why mmap1是文件的长度呢 lseek 是获取文件的长度 移动到最后 则是文件的总长 如lseek fd 80 1 write
  • js获取当前时间(昨天、今天、明天)

    1 时间格式化 1 昨天的时间 2 var day1 new Date 3 day1 setTime day1 getTime 24 60 60 1000 4 var s1 day1 getFullYear day1 getMonth 1
  • 【牛客网机试】写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

    题目描述 写出一个程序 接受一个十六进制的数 输出该数值的十进制表示 输入描述 输入一个十六进制的数值字符串 注意 一个用例会同时有多组输入数据 请参考帖子https www nowcoder com discuss 276处理多组输入的问
  • 起名字!

    五一假期没有出去 闲来找了以下名字 仅以参考 黄哲轩 黄凯轩 黄良宇 黄思禾 黄景龙 黄作湛 黄沐东 黄阳棣 黄骁辉 黄浩锭 黄雷星 黄海城 黄文冰 黄箫程 黄海泽 黄鑫群 黄子铭 黄嘉涛 黄智豪 黄之维 黄逸鑫 黄培祺 黄圣东 黄曙橙 黄
  • 快速入门高斯过程(Gaussian process)回归预测

    前言 这篇文章主要是教会你如何快速了解高斯过程进行回归预测的 并没有太多的公式推导 只有简单的相关的概念的介绍 如果您要自己掌握并使用高斯过程进行一个简单的预测 当然还需要进行一些基础知识学习的 我会在文章最后推荐一些博主有关高斯过程详细介
  • 【Rust 基础篇】Rust Never类型:表示不会返回的

    题解 牛群的重新排列 import java util public class ListNode int val ListNode next 题解 二叉树之寻找第k大 考察二叉树的深度优先遍历 二叉搜索树中序遍历后可以得到升序的序列 所以
  • 常见算法 - 按大小合并多个有序链表

    leetcode 23 Merge k sorted linked lists and return it as one sorted list Analyze and describe its complexity Example Inp
  • csdn百科

    csdn编辑 CSDN创立于1999年 是中国最大的IT社区和服务平台 为中国的软件开发者和IT从业者提供知识传播 职业发展 软件开发等全生命周期服务 满足他们在职业发展中学习及共享知识和信息 建立职业发展社交圈 通过软件开发实现技术商业化
  • 【逻辑】笔面试

    1 二进制问题 1 1 毒药问题 问题 有1000个一模一样的瓶子 其中有999瓶是普通的水 有1瓶是毒药 任何喝下毒药的生命都会在一星期之后死亡 现在你只有10只小白鼠和1个星期的时间 如何检验出哪个瓶子有毒药 首先一共有1000瓶 2的
  • web 基本标签

    浏览器 内核 渲染引擎 js引擎 外壳 5大常用浏览器 chrome 谷歌 内核 webkit blink FireFox 火狐 内核 Gecko Safiri 苹果 内核 webkit opear 欧朋 欧洲 挪威 内核 Presto I
  • k8s进阶篇-云原生存储ceph

    第一章 Rook安装 rook的版本大于1 3 不要使用目录创建集群 要使用单独的裸盘进行创建 也就是创建一个新的磁盘 挂载到宿主机 不进行格式化 直接使用即可 对于的磁盘节点配置如下 做这个实验需要高配置 每个节点配置不能低于2核4G k
  • zz: C++中构造函数或析构函数定义为private

    2019独角兽企业重金招聘Python工程师标准 gt gt gt C 中构造函数或析构函数定义为private 转自 http www blogjava net fhtdy2004 archive 2009 05 30 278971 ht
  • webpack4.x下babel的安装、配置及使用

    前言 目前 ES6 ES2015 这样的语法已经得到很大规模的应用 它具有更加简洁 功能更加强大的特点 实际项目中很可能会使用采用了ES6语法的模块 但浏览器对于ES6语法的支持并不完善 为了实现兼容 就需要使用转换工具对ES6语法转换为E