ecmascript6开篇准备

禅楼望月 禅楼望月     2022-08-19     134

关键词:

1前言

该系列文章均为学习阮一峰老师《ECMAScript 6 入门》一书的学习笔记。原著:http://es6.ruanyifeng.com/

各大浏览器的最新版本,对ES6的支持可以查看kangax.github.io/es5-compat-table/es6/。随着时间的推移,支持度已经越来越高了,ES6的大部分特性都实现了。

Node.js是JavaScript语言的服务器运行环境,对ES6的支持度比浏览器更高。通过Node,可以体验更多ES6的特性。建议使用版本管理工具nvm,来安装Node,因为可以自由切换版本。不过, nvm不支持Windows系统,如果你使用Windows系统,下面的操作可以改用nvmwnvm-windows代替。

2安装Babel

由于目前很多浏览器对ECMAScript 6的支持度有限,但是又想使用ECMAScript 6提供的高级语法,因此babel诞生了,它能将ECMAScript 6的特殊语法转换为ECMAScript 5中对应的解决方案,所以我们不用等到浏览器的支持就可以在项目中使用ES6的特性。。

babel6之后,将babel拆分成两个包:babel-cli和babel-core。如果你想要在CLI(终端或REPL)使用babel就下载babel-cli,如果想要在node中使用就下载babel-core。

一般情况下,我们不会将babel安装在全局,因为不同的项目可能使用不同的babel,并且安装在全局,那么我们的项目就对环境产生了依赖,因此,通常我们将babel-cli安装在项目中。

2.1. 创建一个学习项目

image

js_ES5用来存放转换后的ECMAScript 5文件,js_ES6用来存放ECMAScript 6文件文件。

要想在这个项目中使用npm命令安装babel等,必须首先建立package.json文件,为此使用

1 npm init
View Code

命令在项目中引导创建一个package.json文件。

image_5860d8d4_41ca

2.2. 安装babel-cli

npm install --save-dev babel-cli

image

2.3. 安装 babel-preset-es2015

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

image

babel-preset-es2015是Babel官方提供的一个转码规则,还有其他的转码规则:

# ES2015转码规则
$ npm install --save-dev babel-preset-es2015

# react转码规则
$ npm install --save-dev babel-preset-react

# ES7不同阶段语法提案的转码规则(共有4个阶段),选装一个
$ npm install --save-dev babel-preset-stage-0
$ npm install --save-dev babel-preset-stage-1
$ npm install --save-dev babel-preset-stage-2
$ npm install --save-dev babel-preset-stage-3

2.4.配置babel

Babel的配置文件是.babelrc,存放在项目的根目录下。使用Babel的第一步,就是配置这个文件。该文件用来设置转码规则和插件,基本格式如下。

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

presets字段设定转码规则。但是在windows系统中,不允许直接右键建立没有文件名的文件,可以通过cmd命令行创建:在当前文件夹打开cmd并键入命令

image_5860dbc0_518c

这样我们就创建了一份babel的配置文件,配置它:

image

2.5. 修改package.json

image

build 的值的规范为:

$babel es6.js #转换代码直接输出
$babel es6.js -o es5.js #转换代码输出到文件
$babel -d build-dir source-dir #转换整个目录
$babel -d build-dir source-dir -s #转换整个目录,并生成 source map 映射文件

2.6. 执行转码:

image

这时在js_ES5的目录下,就有转码后的文件里了

image

3 安装babel-register

babel-register模块改写require命令,为它加上一个钩子。此后,每当使用require加载.js.jsx.es.es6后缀名的文件,就会先用Babel进行转码。

npm install --save-dev babel-register

image

使用时,必须首先加载babel-register

require("babel-register");
require("es6");

然后,就不需要手动对es6.js转码了。

太阳需要注意的是,babel-register只会对require命令加载的文件转码,而不会对当前文件转码。另外,由于它是实时转码,所以只适合在开发环境使用

4安装babel-polyfill

Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。

举例来说,ES6在Array对象上新增了Array.from方法。Babel就不会转码这个方法。如果想让这个方法运行,必须使用babel-polyfill,为当前环境提供一个垫片。

安装命令如下。

npm install --save babel-polyfill

然后,在脚本头部,加入如下一行代码。

require("babel-polyfill");

Babel默认不转码的API非常多,详细清单可以查看babel-plugin-transform-runtime模块的definitions.js文件。

require ("babel-polyfill");
[1,2,3].map(n => n + 1);
function addAll() {
    return Array.from(arguments).reduce((a, b) => a + b);
}

执行npm run build转码后:

"use strict";

var _from = require("babel-runtime/core-js/array/from");

var _from2 = _interopRequireDefault(_from);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

require("babel-polyfill");
[1, 2, 3].map(function (n) {
    return n + 1;
});
function addAll() {
    return (0, _from2.default)(arguments).reduce(function (a, b) {
        return a + b;
    });
}

 

5Babel常用命令

1、转换es6.js文件并在当前命名行程序窗口中输出

babel es6.js

2、将es6.js转换后输出到es5.js文件中(使用 -o 或 --out-file )

babel es6.js -o es5.js 
babel es6.js --out-file es5.js

3、实时监控es6.js一有变化就重新编译(使用 -w 或 --watch )

babel es6.js -w --out-file es5.js
babel es6.js --watch --out-file es5.js

4、编译整个src文件夹并输出到lib文件夹中(使用 -d 或 --out-dir )

babel src -d lib
babel src --out-dir lib

5、编译整个src文件夹并输出到一个文件中

babel src --out-file es5.js

6、直接输入babel-node命令,可以在命令行中直接运行ES6代码

babel-node

死磕java同步系列之开篇

简介同步系列,这是彤哥想了好久的名字,本来是准备写锁相关的内容,但是java中的CountDownLatch、Semaphore、CyclicBarrier这些类又不属于锁,它们和锁又有很多共同点,都是为了协同多线程的执行,都是一种同步器,所以这里就借... 查看详情

springinaction读书笔记——开篇

《Spring实战》这本书买了好久了,印象是在去年4·22书香节大促买的。是该多读书,清理一下书架,然后准备买新书的季节了。今天第一次拿起来,打开包装的塑料封皮。封面画质和颜色搭配给我特别的信任感和... 查看详情

ecmascript6.0学习笔记

ECMAScript6入门1、ECMAScript6.0(也就是ES2015 以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。 查看详情

ECMAScript6 AngularJS 过滤器

】ECMAScript6AngularJS过滤器【英文标题】:ECMAScript6AngularJSFilter【发布时间】:2015-09-2820:50:13【问题描述】:我在一个项目中使用ECMAScript6并尝试创建一个Angular过滤器。以下是我的尝试,但是我在控制台中收到以下错误:无法设置... 查看详情

ecmascript6学习笔记

ECMAScript6简介  ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。标准的制定者有计划,以后每年发... 查看详情

javascript01.ecmascript6(代码片段)

查看详情

新jenkins实践-第1章开篇-为什么要做ci/cd?

本章阐述持续集成系统的发展历程、持续集成系统的原理,以及持续集成系统的实现过程,目的是让大家全面了解持续集成系统,更加深入的学习持续集成系统的原理,为后续章节的学习做好准备。我会分享一些个人的经验。1.1... 查看详情

ecmascript6.0(代码片段)

ECMAScript6.0ES6ES6基本介绍let变量const声明常量/只读变量解构赋值模板字符串对象相关新特性声明对象简写对象方法简写对象拓展运算符箭头函数(重要!!!)箭头函数基本使用箭头函数+对象解构大家好呀!我是小笙,接下来... 查看详情

ecmascript6新特性

**ECMAScript**基本语法1、let声明变量//声明变量letaletb,c,dlete=100letf=521,g='iloveyou',h=[]//1.变量不能重复声明letname='Helen'letname='环'/ 查看详情

以《软件随想录》开篇

     实习期间,闲来无事翻翻各种书,一本备受推崇的《软件随想录》便到了我手上。只觉得内容独辟蹊径,细读总有些道理。自认为尚未达到旁征博引炉火纯青的境界,在此摘抄几句寥寥。  1.比尔并... 查看详情

ecmascript6新特性之proxy

ECMAScript6中新增了一个全局构造函数:Proxy。该构造函数能够接收两个參数:一个目标对象。一个处理对象。代码演示样例:vartarget={};varhandler={};varproxy=newProxy(target,handler);proxy将具有与target类似的内部属性/方法;handler能够作... 查看详情

ecmascript6简介(代码片段)

ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。ECMAScript和JavaScript的关系一个常见的问题是,ECMAScript... 查看详情

前端学习ecmascript6入门

ECMAScript6入门let和const命令let命令声明的变量只在let命令所在的代码块内有效let所声明的变量一定要在声明后使用,否则报错块级作用域的出现,实际上使得广泛应用的匿名立即执行函数表达式(匿名IIFE)不再必要了const只能保... 查看详情

前端学习ecmascript6入门

ECMAScript6入门let和const命令let命令声明的变量只在let命令所在的代码块内有效let所声明的变量一定要在声明后使用,否则报错块级作用域的出现,实际上使得广泛应用的匿名立即执行函数表达式(匿名IIFE)不再必要了const只能保... 查看详情

opengles系列之开篇

OpenGLES系列之开篇很久前一直想研究OpenGL无奈自己的惰性,现在准备开始完整的学习下OpenGL,一来工作需要,二来也是自我学习的成长。我是一名iOSer,OpenGL是与平台无关的一种开发技术,虽然苹果在iOS12推荐使用自家的Metal,但... 查看详情

ecmascript6学习笔记

ECMAScript6let和const命令let命令基本用法ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。{leta=10;varb=1;}a//ReferenceError:aisnotdefined.b//1上面代码在代码块之中,分别用let和var声... 查看详情

ecmascript6

1、Babel是一个广泛使用的ES6转码器,可以将ES6代码转为ES5代码,从而在现有环境执行$npminstall--save-devgulp-babel2、最常用的ES6特性let,const,class,extends,super,arrowfunctions,templatestring,destructuring,default,restarguments3、新特性简介let、const 查看详情

ecmascript6类的原型

classCar{getName(){}}letcar=newCar();console.log(‘car.constructor‘,car.constructor===Car);//trueconsole.log(‘Car.prototype‘,Car.prototype);//对象console.log(‘Car.prototype.getName‘,Car.prototype.getName 查看详情