英文原文

https://scotch.io/tutorials/javascript-transpilers-what-they-are-why-we-need-them

摘译(文章内的代码有些过期,部分改动):

Transpilers, or source-to-source compilers,读取用一个编程语言写的源代码,然后产生相等的另一个语言。

你写的语言被翻译成JavaScript,被称为compile-to-JS语言。

你可能听说过CoffeeScript或者TypeScrip这类语言。

CoffeeScript会提供语法糖,非原生JavaScript。

TypeScript更极端,增加了 classical object-oriented semantics to a fundamentally different language.

"use strict";

// TypeScript -- JavaScript, with types and stuff
function printSecret ( secret : string ) {
console.log("${secret}. But don't tell anyone.");
} printSecret("I don't like CoffeeScript.");

问题是JavaScript环境只理解原生js。你不能在控制台写那两种代码,会报告❌。

甚至在就浏览器,你写一些纯js 代码,仍会报告❌。比如, Template literals就不支持旧浏览器。

因此, transpiler来了,它读取Coffeescript, TypeScript, ES2015, 转化为plain js, 让旧浏览器也支持。

In Defense of Transpilers

不同的语言开发,有不同的偏好。如 Pythonistas like CoffeeScript.

但你可能只喜欢plain js。

不同的浏览器使用不同的js engine。因此使用编译器把你用ES6写的代码转化为所有浏览器都支持的ES5。

这样,你就可以使用任何功能了。

总之,编译器:

  1. 允许我们写compile-to-JavaScript languages, like CoffeeScript, TypeScript, or ClojureScript;
  2. 让我们使用新的和潜在的js features
  3. Contribute to the development of the ECMAScript specification.

Using Transpilers

比较流行的编译器是Babel

本章:

  1. Comparing ES2015 source to transpiled output;
  2. Setting up the Babel command-line interface (CLI); and
  3. A look at how build toolks like Webpack, JSPM, and Babelify streamline the process.

使用 Babel's live transpiler. 在左边窗口写一些包含ES6功能的代码,然后会转化为ES5的代码。

Setting Up the Babel CLI

To get started:

  1. Create a directory somewhere;
  2. Initialize it as an NPM project;
  3. Install the Babel tool, along with the presets and plugins we'll be using; and
  4. Configure Babel to use those presets and plugins.
cd && mkdir babel_example &&  cd babel_example

//Node默认的模块管理器,用来按照和管理Node模块。
//初始化,生成一个新的package.json文件
npm init npm install --save-dev babel-cli babel-preset-es2015 babel-plugin-transform-async-to-generator

安装Babel CLI,

安装babel-preset-es2015,一组插件集合,用于支持所有的ES2015功能。

安装babel-plugin-transform-async-to-generator, 可以使用ES7的功能Async await关键字。

备注:原文再往下就说的很模糊。所以网上找了几篇文章,尝试多次,解决。下面是经验总结。

使用Babel cli详解 (讲解最清楚。)

阮一峰的入门教程

首先,再项目文件夹根目录下,创建.babelrc。添加:

//根据需要添加插件和预设的规则集。
{
"presets": ["es2015"],
"plugins": ["transform-async-to-generator"]
}

然后,创建一个index.js文件,写一些ES6代码。

最后, npm run babel, 但是报告❌。

npm ERR! missing script: babel

这是因为非全局安装,所以报告错误。

修改package.json文件:

//添加脚本:
"scripts": {
"babel": "babel"
},

然后再运行, npm run babel,会再屏幕输出index.js的转码。

同样,如果想要使用babel-node命令(提供支持ES6的repl环境。可以直接运行所有的ES6代码),

//添加脚本,会调用文件babel-node, 执行相关脚本。
"scripts": {
"babel-node": "babel-node"
},

然后npm run babel-node

> babel_1@1.0.0 babel /Users/chentianwei/babel_1
> babel-node > (x => x * 2)(1)
2

官网的批量转码:

推荐的方式:

+   "scripts": {
+ "build": "babel src -d build"

项目根目录下,需要建立src和lib目录。(其他目录也可,对应着改)。

然后输入

~/babel_1 ⮀ npm run build

> babel_1@1.0.0 build /Users/chentianwei/babel_1
> babel src -d build src/index.js -> build/index.js

注意⚠️windows下的使用有区别,具体见使用Babel cli详解


使用babel-polyfill实现对ES6新API的支持

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

如果想让这些方法运行,必须使用 babel-polyfill,为当前环境提供一个垫片。
 
安装:
npm install --save-dev babel-polyfill
 

JavaScript Transpilers: 为什么需要用它们?Babel的使用介绍。的更多相关文章

  1. babel简介——简单介绍与实用(转)

    博客讲解内容如下: 1.babel是什么 2.javascript制作规范 3.babel转译器 4.babel的使用 5.常见的几种babel转译器和插件 6.babel最常见配置选项 7.babe ...

  2. 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  3. JavaScript自动化构建工具grunt、gulp、webpack介绍

    前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...

  4. javascript中的变量作用域以及变量提升详细介绍

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解变量作用域 “一个变量的作用域表示这个变量存在的上下文 ...

  5. Javascript动态引用CSS文件的2种方法介绍

    最近做一个项目,需要javascript动态插入样式,结果以前的方法失效了!查了2个小时的原因竟然是自己手贱,这个最后再说! javascript插入样式在前端开发中应用比较广泛,特别是在修改前端表现 ...

  6. javascript大神修炼记(1)——入门介绍

    读者朋友们好,从今天开始,我将带领新朋友们,从了解javascript开始,一步一步地进阶到大神境界,别的不废话,现在开始,我们就一点一点地从入门阶段开始. 我们还是介绍一下javascript的身世 ...

  7. 对JavaScript事件处理程序/事件监听器的设定的简单介绍

    下面是一些对事件处理进行设定的方式. 指定为HTML元素的属性(事件处理程序) 指定为DOM元素的属性(事件处理程序) 通过EventTarget.addEventListener()进行指定(事件监 ...

  8. JavaScript中的apply()方法和call()方法使用介绍

    1.每个函数都包含两个非继承而来的方法:apply()和call(). 2.他们的用途相同,都是在特定的作用域中调用函数. 3.接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(t ...

  9. JavaScript 事件之event.preventDefault()与event.stopPropagation()简单介绍

    event.preventDefault()用法介绍: 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作). 例如,如果 type 属性是 “submit”,在事件传播的任 ...

随机推荐

  1. topcoder srm 685 div1

    problem1 link 依次枚举每个元素$x$,作为$S$中开始选择的第一个元素.对于当前$S$中任意两个元素$i,j$,若$T[i][j]$不在$S$中,则将其加入$S$,然后继续扩展:若所有的 ...

  2. Bootstrap3基础 btn-primary/warning... 三类按钮的六种样式

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  3. Django框架(九) Django之ORM常用字段和参数

    ORM字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范 ...

  4. upc组队赛1 黑暗意志【stl-map】

    黑暗意志 题目描述 在数千年前潘达利亚从卡利姆多分离之时,迷雾笼罩着这块新形成的大陆,使它不被外来者发现.迷雾同样遮蔽着这片大陆古老邪恶的要塞--雷神的雷电王座.在雷神统治时期,他的要塞就是雷电之王力 ...

  5. Java基础 【Arrays 类的使用】

    package com.zuoyan.sort; import java.util.Arrays; public class ArraysClassDemo { public static void ...

  6. Tag Helpers in forms in ASP.NET Core

    Tag Helpers in ASP.NET Core Tag Helpers in forms in ASP.NET Core HTML Form element ASP.NET Core buil ...

  7. XMatch: 您的部门管理助手

    本博客为XMatch项目宣传博客. XMatch: 您的部门管理助手 目录 一.产品概述 二.产品功能 三.产品的创新特色 四.推广方案 五.宣传图 一.产品概述 当前社团的各方面管理工作主要都由手工 ...

  8. .NET下使用 Seq结构化日志系统

    前言 我们公司在日志管理方面一直没有统一,主要痛点有: 每个开发人员都是各用各的,存储日志的形式也是五花八门,如:本地文件,数据库,Redis,MongoDB 由于公司访问服务器要通过堡垒机,所以本机 ...

  9. 8、nginx和tengine简介

    练习: 使用nginx反向代理(rr调度)用户请求至两个以上的后端LAMP(按标准路径部署的有pma,wd),不管用户请求是什么内容都反向代理至后端服务器去,但是如果用户请求的是图片或者是html,就 ...

  10. mathType换行等号对齐

    例如: 输入步骤: (1) (2) (3) (4) 事实上,[ctrl+;]表示的是插入了一个对齐标记符.