耗时近2年,javascript编译器babel 7登场 – 十轮网-九游会官网真人游戏第一品牌

javascript编译器babel,在上一个版本babel 6发布3年后,终于发布了新的版本babel 7。这次的更新除了加入了peerdependency等新功能外,移除了年度套件集(yearly preset)以及阶段套件集(stage preset),并且不再支持旧版本node,以更新本身相依工具。

babel是一个工具链,主要用于将ecmascript 2015 程序代码转成支持新旧浏览器的向后兼容javascript。不像服务器语言,由于浏览器版本太多种,客户端通常没有办法保证用户的javascript执行结果都是相同的,这样的情况在旧版本的internet explorer特别严重。当开发者想要使用新语法像是class a {},则会在旧的浏览器上因为语法错误而获得空白的画面。

babel则提供开发人员能够使用新语法,但同时做到对旧浏览器向后兼容的方法,就class a {}这个例子来说,babel能够将语法转为var a = function a(){}。由于babel能够转换javascript程序代码,又可以实现新功能,因此babel也成为javascript制订委员会tc39和社群,在语言以及功能发展上的沟通桥梁。

babel在github上,目前存在130万个相依程序代码存储库,每月在npm有1,700万次下载,主要框架react、vue、ember、polymer,或是wordpress等工具都看的到babel身影,而facebook、netflix和airbnb等企业也都有采用,许多javascript开发者可能都在不知情的状况下使用babel,babel已经可以说是javascript开发的基础。

而这次babel 7更新部分非常多,不少还是变革性的改变,官方列出了主要6项重大更新。首先,由于这次babel版本更新有大幅的变化,因此官方决定放弃支持较旧的node版本,包括不再维护的node.js 0.10、0.12、4与5,来对babel本身程序代码库进行改进,并且升级相依项目和工具,诸如eslint、yarn、jest和lerna等。

再来,通过切换使用范围(scoped)套件,将官方的移至@babel命名空间。而这能帮忙用户区分官方的套件,因此过去babel-core用法,现在则使用@babel/core,babel-cli改成@babel/cli,而babel-preset-env也应改用@babel/preset -env。过去范围套件并没有被广泛使用,许多开发者甚至不知道范围套件的存在,而现在搜索范围套件的问题已经解决,下载计数器运行正常,只剩下部分第三方注册管理服务不支持,官方认为,没有理由等待这些服务。

第三项重大改变,babel 7移除了并停止发布任何年度套件集,像是带有年分的preset-es2015套件集,因为@babel/preset-env就能取代这些需求,其包含了所有年度增加的内容,以及针对特定浏览器集的支持能力。 babel-preset-env是一个存在已久的默认值,但可以用来取代开发者需要的es2015、es2016、es2017或es20xx这类套件集。另外,第四、这版也抛弃了stage套件集,像是@babel/preset-stage-0。

第五、重命名部分的套件,现在任何tc39提议的插件都使用-proposal关键字而非-transform,因此过去@babel/plugin-transform-class-properties现在要改成@ babel/plugin-proposal-class-properties。

最后一项重要更新,现在babel 7对@babel/core中的所有插件、套件集和顶级套件,引入同侪相依功能peerdependency。 peerdependency是程序代码预期使用的相依性,而非作为实例细节的相依项目。由于babel-loader原本就具有babel-core上的peerdependency,所以这项改变只是将命名空间改为@babel/core,让用户不会在错误的babel版本安装这些套件。而对于那些已经在babel-core上存在peerdependency,但还不想要有重大变更的工具,官方也已经发布了一个新版本的babel-core,来帮忙开发者过渡更新。

官方提到,babel这次的更新都来自于社群的贡献,即便babel被广泛的利用,却没有充足的资源好好发展,虽然大家使用开源资源似乎理所当然,但也应该考虑背后维护开源项目的人,没有资源的开源项目不会健康,因此呼吁社群可以贡献时间或是金钱,维持babel发展。

发表评论