babel的安装与使用

时间:2021-05-07 17:32:54 类型:JS/JQUERY
字号:    

1.babel是什么


babel是一个javascript转译器。为什么会有babel存在呢?原因是javascript在不断的发展,但是浏览器的发展速度跟不上。以es6为例,es6中为javascript增加了箭头函数、块级作用域等新的语法和Symbol、Promise等新的数据类型,但是这些语法和数据类型并不能够马上被现在的浏览器全部支持,为了能在现有的浏览器上使用js新的语法和新的数据类型,就需要使用一个转译器,将javascript中新增的特性转为现代浏览器能理解的形式。babel就是做这个方面的转化工作。

2, babel使用

    

 在本地磁盘上创建一个文件夹es6(名字任意),在该文件夹下打开命令行工具,初始化项目。

F:\es6>npm init -y

  这个命令目的就是创建一个默认的package.json文件

     本地安装babel命令行工具

  安装babel的命令行工具的目的是为了在命令行使用babel。

  babel命令行工具可以全局安装也可以本地安装,官方文档推荐本地安装,原因有2点;

  1.本地安装不同的项目可以使用不同版本的babel,你也可以单独对某个项目的babel进行升级等操作

  2.每个项目单独安装的意味着对计算机环境没有依赖,便于移植

  在命令行中继续执行如下命令

npm install --save-dev babel-cli

  这样就已经在本地安装好babel了。

  此时我的package.json文件如下

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

在命令行中调用babel

  本地安装的babel是不能够在直接命令行中运行的,为了在命令行中运行babel,我们有两个方法,

  1. 是需要配置下package.json文件的scripts项。比如如下代码,配置了一个build命令,运行该命令(npm run build)的时候就会在命令行执行babel src -d lib


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

 第2个方法是你需要可以进入node_modules文件夹,再进入.bin文件夹,然后执行在命令行中执行babel src -d lib。

  推荐使用npm run build的方法。

  这里需要解释babel src -d lib这个命令的意思。这个命令目的是把src文件夹下的文件都转译,转译后的文件放到lib目录下。

  ps:此时无论你是运行npm run build 还是运行babel src -d lib命令(其实两个方法本质上都是一样的,都是运行babel src -d lib)命令行都会报错,原因是现在还没有src文件夹。可以先不用管它,稍后我们再新建src文件夹。

  创建.babelrc配置文件

  在cmd中键入以下命令

  type nul>.babelrc

  这个时候你的文件夹里就多了一个.babelrc文件了。windows是不能直接创建空文件名的文件的,所以必须通过命令行创建。

  安装babel的转译器

  这里我们以babel-preset-latest为例。

  在命令行中执行如下代码就会安装babel-preset-latest转译器。

    # 最新转码规则
  npm install --save-dev babel-preset-latest

注意:babel命令行工具(babel-cli)跟babel转译器是两个不同的东西,命令行工具并不具有转译代码的功能,只是为了在命令行中使用babel。要转码必须安装转译器,比如babel-preset-latest转译器或者babel-preset-react转译器。要转译的时候,还要在.babelrc文件或者命令行中配置这些转译器(presets)选项

    配置.babelrc文件

  .babelrc用于配置除回调以外的所有babel api 选项。例如plugins和presets。plugins用于配置我们转译所需要的插件,presets用于配置我们所需要的转译器。

  .babelrc不是必须的,我们在.babelrc中配置的选项都可以通过命令行添加,比如在命令行执行 babel src -d lib --presets=latest等价于在.babelrc中配置 "presets":["latest"]。当然.babelrc要明显方便很多。

  babel在转译代码的过程中会自动读取当前目录.babelrc配置文件,如果当前目录没有的话就遍历整个目录树去寻找,直到找到.babelrc文件或者含有"babel"字段的package.json文件,然后使用这些配置选项来转译代码。

  1、如果没有.babelrc文件,或者没有在其他文件中设置过babel的presets的配置选型,并且命令行中也没有配置–presets,那么代码是不会转译的。原es6代码什么样,转译后的代码还是什么样。

  2、如果你的.babelrc或者你的命令行使用了你没有安装的转译器(presets),代码就会报错

  3、但.babelrc中的配置跟你在命令行中使用的配置冲突的时候,以.babelrc中的配置为准

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

 babelrc的替代方案

  如果你不想生成.babelrc文件,你可以在你的package.json文件中对babel进行配置。如果你使用gulp或者webpack之类的管理工具的话,也可以在这里工具的配置选项里添加babel的配置选项。

  以下以在package.json中配置为例。

{
  "name": "es6",
  "version": "1.0.0",
  "description": "",
  "main": "arrow.js",
  "scripts": {
    "build": "babel src -d lib --comments=true"
  },
  "babel":{
    //babel选项
    "presets":["es2015"],
    "comments":false
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.24.1",
    "babel-loader": "^7.1.1",
    "babel-preset-env": "^1.6.0",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "webpack": "^3.2.0"
  }
}

  在package.json中配置babel等同于使用.babelrc文件

  编写es6代码

        在当前目录分别建设src和lib文件夹

       在src下面新建arrow.js文件, 内容如下:

   input.map(item => item + 1);

  转译es代码

      执行命令: npm run build

      看lib文件下, 生成了 arrow.js文件, 内容如下:

"use strict";

input.map(function (item) {
  return item + 1;
});

  经过上面的步骤我们已经完成了转译代码的工作


<