手把手教你webpack3(5)babel-loader详细使用说明
来源:互联网 发布:小米4屏幕多少钱淘宝 编辑:程序博客网 时间:2024/05/22 15:04
前注:
文档全文请查看 根目录的文档说明。
如果可以,请给本项目加【Star】和【Fork】持续关注。
有疑义请点击这里,发【Issues】。
5.1、babel-loader
这个用于将使用ES6规范的js代码,转为ES5。
首先安装一大堆东西,参照下面的命令,一共是4个(包括webpack)
npm install --save babel-loader babel-core babel-preset-env webpack
创建babel规则文件.babelrc
,内容设置为:
{ "presets": [ [ "env", { "modules": false, "targets": { "browsers": [ "> 1%", "last 2 versions", "not ie <= 8" ] } } ] ]}
然后app.js
里添加文件内容(这显然是es6语法):
let foo = () => { console.log('1')}foo()
运行 npm run test
执行脚本,等脚本执行完毕后,查看dist文件夹下的 dist.js
文件。
会发现代码已经被成功转为非es6语法了(截取如下):
var foo = function foo() { console.log('1');};foo();
但是,这个只能转一些普通的es6语法,像例如Promise
、Set
之类的,他是无法转换的。
如果想要转换这些,我们需要做一些额外的工作。
首先安装插件
npm install babel-runtime --savenpm install babel-plugin-transform-runtime --save-dev
然后修改.babelrc
文件的内容为:
{ "presets": [ "babel-preset-env" ], "plugins": [ "transform-runtime" ]}
【注】:
babel-runtime
(也就是上面plugins
数组中的transform-runtime
),解决了辅助代码(即让我们可以使用新特性的代码)被默认添加到每一个需要他的文件的问题(这会导致文件过大)。
具体解决方法是禁用了babel对每个文件的runtime注入,引入 babel-plugin-transform-runtime
并且使所有辅助代码从这里引用。
表现效果:假如A模块异步加载B模块,A、B模块里都使用了Set
,那么为了使A模块正常运行,引入了某些代码。然后因为B模块又是被A模块引入的,那么B模块在被加载的时候,A模块里已经引入的代码,就没必要再次引入了,所以B模块里是不存在A模块引入的那些兼容代码的。
【注(完)】
修改webpack设置文件的loader内容为:
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'}
最后修改app.js
这个文件的内容,给里面加一些特殊的es6语法:
let foo = () => { console.log('1')}foo()let bar = new Promise((resolve, reject) => { resolve(1)})bar.then(msg => console.log(msg))let baz = new Set([1, 2, 3])console.log(baz)let another = async function () { console.time('timeout') let result = await new Promise((resolve, reject) => { console.log('in Promise') setTimeout(() => { resolve('Promise resolve') }, 1000) }) console.log(result) console.timeEnd('timeEnd')}another()
以上代码包含es6的Promise
,Set
,以及es7中的async/await
。
此时我们运行一下npm run test
试试,然后查看dist/dist.js
文件,会发现我们的代码出现在大约1040行的位置,并且原本使用es6、es7语法的代码,都被一段很长很复杂的代码所替换(因为太长,所以这里略过)。
这说明我们转义成功了!
更多请参照【实战3】解决有es6、es7语法的js代码
- 手把手教你webpack3(5)babel-loader详细使用说明
- 手把手教你webpack3(6)css-loader详细使用说明
- 手把手教你webpack3(7)style-loader详细使用说明
- 手把手教你webpack3(8)url-Loader配置简述
- 手把手教你webpack3(9)File-Loader配置简述
- 手把手教你webpack3(10)Less-Loader配置简述
- 手把手教你webpack3(11)PostCSS-Loader配置简述
- 手把手教你webpack3(4)出口(详解)
- 手把手教你webpack3(2)简单指令(npm脚本)
- 手把手教你webpack3(3)入口(多入口)entry
- 手把手教你webpack3(1)最简单的webpack实例
- 【git】推荐!手把手教你使用Git(非常详细)
- 手把手教你利用Word制作成绩表(超详细)
- webpack3最新版本配置研究(一)loader
- webpack3最新版本配置研究(二)loader
- webpack3最新版本配置研究(一)loader
- 搭建React开发环境(使用babel,webpack3)
- webpack中的babel-loader
- Linux网络配置方法(DNS,IP,GW)
- Linux网络基本网络配置
- Dubbo 学习入门(一)
- 一个计算机专业学生几年的编程经验汇总(转)(一)
- 一个计算机专业学生几年的编程经验汇总(转)(二)
- 手把手教你webpack3(5)babel-loader详细使用说明
- 一个计算机专业学生几年的编程经验汇总(转)(三)
- 启动Tomcat报错 Unable to load class[xxx xxx] to check against the @HandlesTypes annotation
- 一个计算机专业学生几年的编程经验汇总(转)(四)
- 一个计算机专业学生几年的编程经验汇总(转)(五)
- 职业程序员必看之文章
- mysql数据表的约束及操作
- linux 下maven安装
- JAVA多线程程序设计23个要点