首页 > 技术文章 > Babel

shige720 2019-09-11 16:10 原文

  Babel是一个JS的编译器,可以把浏览器不支持的特性编译为支持的代码

 

安装

node.js

  安装babel前,需要安装node.js(babel的运行是基于node的)

  在安装完成后,运行命令提示符,输入node -vnpm -v,如果都有输出版本号则安装成功

  另外可以在桌面/路径文件夹中,按住Shift右键,在此处打开PowerShell窗口,在其中同样输入node -vnpm -v检测是否成功安装node.js

  PowerShell的好处在于其路径同你打开的目录是一致的(例如在桌面打开,其最初的路径就是桌面的路径)

  后续使用babel时需要注意目录是否为你的项目目录

babel

  参考Babel的中文网站

  1.在你的项目路径下初始化一个package.json文件,用来描述当前工程的信息(开发依赖、生产依赖、项目名、仓库版本、项目名等)

  可以用npm init来初始化这个package.json文件,其中需要填写众多信息,如果用默认信息一路Enter过去即可

  也可以用npm init -y来初始化这个package.json文件,直接输出一个信息全部为默认值的一个package.json文件

  如果windows下安装失败,需要用管理员模式打开cmd

  2.安装babel

  用npm install --save-dev babel-cli来在当前目录下安装babel

  也可以简写为npm i -D babel-cli

  3.修改package.json

  打开最初创建的package.json,在其中的scripts里加一个键值对build,值为babel entry.js(如下)

  

  在项目的node_modules\babel-cli路径下,可以看到一个package.json文件,其中也可以看到执行babel时的依赖(dependencies)

  

 

babel的使用

  首先可以在项目的文件夹中创建一个entry.js文件,在其中写一些ES6扩展的代码(类、静态方法、箭头函数等)

  

  用npm run build命令,发现命令提示符中输出了刚才在entry.js里写的代码

  原因在于刚才在项目里的package.json里添加了build方法并写了babel entry.js,也就是在执行build时会运行entry.js的内容,是npm管理工作流的一个好方法

  

  但是这里的代码和输入的完全一样,原因在于我们没有制定转换的规则

  这里编译前需要用npm i -D babel-preset-env指令安装一个转换规则的包,安装完可以看到package.json文件里的依赖多了一行

  

  之后创建一个配置文件,用来告诉babel用什么规则编译代码,文件名为.babelrc(这个名称是固定的),内部配置如下(注意保持JSON的格式)

  

  之后再次通过build指令编译entry.js文件,可以发现此时代码已经被成功编译

  

  当然也可以在env里再添加更为详细的配置(例如可以兼容最新一个版本的浏览器)

  

  更为详细的Browser取值可以参考Browserlist网站(https://github.com/browserslist/browserslist)

  但是目前为止,编译完的代码只是输出在命令行中,我们需要在package.json里的build添加-o index.js,表示编译成功的代码输出到index.js文件中

  

  但是这里每次修改代码就需要人工重新编译,因此我们在build后添加-w(watch的缩写,相当于监听)(只要修改代码就自动编译

  

 

案例

  ES6中有一些提案,例如用static声明静态属性,但在JS中目前还不可以实现,因此我们可以用babel的一些包,通过编译来实现这些提案

  用npm i -D babel-plugin-transform-class-properties安装这个包

  之后修改.babelrc文件,给其添加一个字段(每多一个插件就要多一个字段),如下

  (关于babel的插件可在www.npmjs.com搜索)

  

  然后就可以用static声明静态属性了,代码也会被实时编译到index.js文件中

推荐阅读