Babel入门知识总结

本文目录:

  • 1.babel是什么?
  • 2.使用babel
  • 3.babel插件
  • 4.babel的preset
  • 5.webpack和babel
  • 6.优化babel-loader

1.babel是什么?

Babel 是一个 JavaScript 编译器,它使用非常广泛,可以将es6转换成es5,从而在一些不支持es6的
浏览器中运行,这意味着你写es6代码的时候就不需要去关心浏览器是否支持es6

2.使用babel

我们新建一个babel-demo的目录来演示babel的使用,进入到babel-demo目录后,运行命令初始化项目

npm init -y

这条命令的作用是在babel-demo目录下生成一个package.json的文件
接下来,我们需要安装babel-cli

npm install --save-dev babel-cli

babel-cli是命令行工具,安装以后我们就可以在命令行中通过babel命令来转码
安装好后,我们写一段代码来测试一下babel的编译转码功能,在babel-demo目录下新建index.js文件,
编写下面代码:

() => console.log("hello nodeing.com")

接下来,通过babel命令去编译index.js

./node_modules/.bin/babel index.js

如果你不想每次运行babel的时候都输 ./node_modules/.bin/babel这么么一串命令, 你可以把这个命令配置到package.json中

{
    "name": "babel-demo",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "./node_modules/.bin/babel index.js"
},
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "babel-cli": "^6.26.0"
    }
}

这个时候,我们通过npm的命令来启动编译
"build": "./node_modules/.bin/babel index.js"是新增加的

npm run build

运行后的结果,原样输出了index.js中的内容,为什么babel并没有编译我们的index.js文件呢?
原因在于,babel是基于插件的,插件就是提供的一些扩展功能,如果没有告诉babel用哪个插件来做事情,那么babel就不会处理

3.babel插件

前面我们讲到,babel是基于插件的,做不同的事情需要不同的插件,这样让babel非常灵活并且强大
我们去找到transform-es2015-arrow-functions这个插件,点进去查看它的使用,这个插件的功能是帮助我们把es2015(es6)的箭头函数编译成es5代码
下面我们来安装这个插件

npm install --save-dev babel-plugin-transform-es2015-arrow-functions

安装好以后,我们需要在babel-demo目录下新建.babelrc文件,这个文件就是babel的配置文件,我们在这个配置文件中增加配置项

{
    "plugins": [
        "transform-es2015-arrow-functions"
    ]
}

然后,运行npm命令,查看效果

npm run build

运行结果:

(function () {
    _newArrowCheck(this, _this);
    return console.log(1);
}).bind(this);

接下来,我们去修改index.js 文件,增加其他的es6语法

() => console.log(1)
class demo{}

再去执行npm run build命令,得到的效果也是原样输出,这个原因和前面我们遇到的⼀样,它需要安装另一个插件才能让babel运作起来,要不然就什么都不做

npm install --save-dev babel-plugin-transform-es2015-classes

安装好后,同样需要去修改.babelrc文件,增加配置

{
    "plugins": [
        "transform-es2015-arrow-functions",
        "transform-es2015-classes"
    ]
}

接下来就可以运行npm run build命令来查看效果了

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) {
    throw new TypeError("Cannot call a class as a function"); } }
(function () {
    return console.log(1);
});
let demo = function demo() {
    _classCallCheck(this, demo);
};

以上就是babel的插件使用方法

4.babel的preset

通过插件的学习,我们知道了babel要去解析转换es6语法,需要安装对应的插件,我们只是使用到了两个es6的语法,就需要装两个插件,当我们需要使用很多es6语法的时候,那就需要装非常多的插件,这样显得非常麻烦,那么有没有简便点的方法呢?
babel通过preset来解决我们上面提出的问题,preset叫做预设,意思就是说预先设置一些常用的语法配置,把一批常用的相关的插件打包来满足我们的开发,例如:我们处理es6语法的时候,我们就把和es6相关的语法插件打包在一起,组成一个预设,这个预设叫做es2015,所以,当我们下载es2015这个预设的时候,本质上就是去下载一批和es6相关的语法插件,这样我们就不用每次去下载配置插件了
安装preset-es2015

npm install babel-preset-es2015 --save-dev

安装好后,需要去修改.babelrc配置文件

{
    "presets": [
        "es2015"
    ]
}

最后,通过npm run build命令,查看编译结果
装一个更全面的可以解析es2015,2016,2017...的预设

npm install babel-preset-env --save-dev

修改配置文件

{
    "presets": [
        "env"
    ]
}

5.webpack和babel

让我们把目录切换到webpack-demo,修改webpack-demo下的index.js加入下面一段es6代码

// 测试es6是否被编译成es5
()=>console.log("hello nodeing!!!")

然后运行命令查看结果

npm run dev

在打包出来的my-first-webpack.bundle.js文件中查看到,我们写的es6代码原样输出,webpack并没有把es6代码编译成es5要让es6代码被编译,我们需要借助babel的力量,这里我们需要安装babel-loader和babel-core以及处理es6语法的预设,babel-loader的作用就是将es6代码送给babel-core处理,babel-core就是babel工作的核心api
安装babel-core和babel-loader以及处理es6的预设

npm install babel-loader babel-core babel-preset-es2015 --save-dev
//es2015可以改为功能更齐全的env

在webpack-demo目录中新建.babelrc文件,增加babel配置

{
    "presets": [
        "es2015"
        ]
}

接下来需要在webpack.config.js文件中增加配置项
在rules规则数字中增加下⾯代码

{
    test: /\.js$/,
    use:['babel-loader']
}   

运行npm run dev命令把index.js打包成my-first-webpack.bundle.js,在my-first-webpack.bundle.js中我们查看到,原来的es6代码已经成功转换成
es5代码了

// 测试es6是否被编译成es5
(function () {
    return console.log("hello nodeing!!!");
});

6.优化babel-loader

当我们写这个正则表达式 (/.js$/) 的时候,表示所有js文件都会被送babel-loader加载,然后由babel-core处理一遍,这里包括我们安装的很多第三方包,你会发现node_modules文件夹下会有很多的js文件,但是这些js文件已经由开发者打包好了我们可以直接使用的,并不需要我们再去处理一遍,因此,如果babel-loader再去处理的话,会浪费太多的时间,导致webpack打包编译很慢,我们现在需要优化它。具体的做法是排除不需要再次编译的,让babel-loader只处理我们开发的源文件,因此,我们需要修改webpack.config.js中的配置

{
    test: /\.js$/,
    use:['babel-loader'],
    exclude: path.resolve(__dirname, 'node_modules')
},

其中,exclude: path.resolve(__dirname, 'node_modules') 这条语句表示排除node_modules这个文件夹,因为这个文件夹下放的都是第三方包,并不需要我们再次勇babel去编译了
再次运行npm run dev去打包的时候会发现已经快很多了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容

  • babel官网 babel 介绍 Babel 是一个通用的多用途 JavaScript 编译器。通过 Babel ...
    锋享前端阅读 1,809评论 0 10
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,266评论 4 31
  • 目录第1章 webpack简介 11.1 webpack是什么? 11.2 官网地址 21.3 为什么使用 web...
    lemonzoey阅读 1,731评论 0 1
  • Babel 入门指南 ​:warning: 注意:Babel 可以与很多构建工具(如 Browserify、Gru...
    静默虚空阅读 2,534评论 0 4
  • 何梓诚阅读 419评论 0 0