这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战javascript
HTMLjava
HTML1,HTML2,HTML3,1991 - 1997 由 IETF 组织制定node
IETF:The Internet Engineering Task Force,国际互联网工程任务组es6
HTML3.2npm
1997.1 发布,至今归属于 W3C 组织(万维网联盟)json
JavaScript浏览器
1995,网景公司推出 LiveScript,为蹭 Java 热度,联合发布 JavaScriptbabel
1996,JavaScript1.0、1.1 发布markdown
1997,微软 JScript 发布(彻底照抄 JavaScript)app
1997.6,ECMAScript1.0 发布(以 JavaScript1.0 为蓝本)
1998.6,ECMAScript2.0 发布
1999.12,ECMAScript3.0 发布
2000,ECMAScript4.0 草案没有被经过,调整幅度太大
2007,ECMAScript4.0 准备发布,依然没有经过
2008.7,在 3.0 基础上推出 ECMAScript3.1,改名为 ECMAScript5
2009.12,将 4.0 分为三部分,一部分做为 ES5 正式发布,另外 javascript.next,javascript.next.next 两部分放入草案中
2011.6,ECMAScript5.1 发布,成为 ISO 标准
2013.3,javascript.next 草案冻结
2013.6,javascript.next 草案发布
2015.6,ECMAScript6 正式发布
ECMAScript
ECMA 即欧洲计算机制造联合会,制定脚本语言规范了 ECMA-262,听从该规范的脚本语言成为 ECMAScript
ECMAScript2015/2016/2017 等都属于 ES6,每一年都会有小版本的改动
首先使用 npm init 将项目交由 npm 管理依赖(生成 package.json 文件)
安装 babel 转译规则集和脚手架
npm i -D babel-preset-env
npm i -D babel-cli
复制代码
项目根目录建立 .babelrc 文件,指定规则集
{
"presets": ["babel-preset-env"]
}
复制代码
package.json 的 scripts 属性中添加命令
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"babel-build": "babel app.js"
}
复制代码
根目录下的 app.js 中使用了 ec6 语法
const fnc = () => {
console.log('es6 箭头函数')
}
fnc();
复制代码
执行 npm run babel-build 后根目录下生成 bundle.js
'use strict';
var fnc = function fnc() {
console.log('es6 箭头函数');
};
fnc();
复制代码
同理,使用 babel src -d lib 指令能够将 src 下的 js 文件所有转译到 lib 文件夹下
"scripts": {
"babel-build-src": "babel src -d lib"
}
复制代码
使用 babel-node 执行代码
"scripts": {
"babel-node": "babel-node ./src/app.js"
}
复制代码
npm run babel-node 便可执行 app.js(node 环境)
使用 babel-standalone 在浏览器中转译 es6 语法
使用 cdn 方式引入,将 es6 代码 script 标签指定为 text/babel
<div id="js-box"></div>
<script src="https://cdn.jsdelivr.net/npm/@babel/standalone@7.11.6/babel.min.js"></script>
<script type="text/babel"> const getMsg = ()=> { return 'Message' } document.getElementById('js-box').innerHTML = getMsg() </script>
复制代码
Babel 默认只对 ES6 语法进行转译,不包含 ES6 的新增 API
如 Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise 等全局对象,以及一些定义在全局对象上的方法(Object.assign...)
使用 babel-plyfill 提供新增 API 的支持
npm install --S babel-polyfill
复制代码
引入 babel-plyfill
require("babel-polyfill")
// 或
import "babel-polyfill"
复制代码