2017值得一瞥的JavaScript相关技术趋势从属于笔者的Web 前端入门与工程实践,推荐阅读2016-我的前端之路:工具化与工程化获得更多关于2016年前端总结。本文主要内容翻译自,笔者对于每个条目进行了些许完善。
  本文中提及的这些趋势可能离大部分开发者还很远,或者说离真正的大规模工程化应用还很远,不过不妨碍我们提前两三年了解下。本文仅代表原作者个人看法,不喜留言轻喷,译者也很好奇大家对这个列表的看法。
  跨年前两天,Dan Abramov在Twitter上提了一个问题:

  JS社区毫不犹豫的抛出了它们对于新技术的预期与期待,本文内容也是总结自Twitter的回复,按照流行度降序排列。有一个尚未确定的小点是既然函数式编程已不再是少数派,是否要把它踢出红毯呢?
  WebAssembly

  去年笔者表示过了对于WebAssembly的期待,WebAssembly是面向Web平台的底层代码。其初衷是希望能够使所有语言都能够编译运行到Web平台,这一点对于很多函数式编程、响应式编程的粉丝充满吸引力。特别是随着这几年JavaScript社区的突飞猛进,很多开发者并不能跟得上这门语言衍化的速度,因此他们也非常希望能够直接用自己习惯的语言而不是要去重头学一门从入门到直接放弃的语言。不过JavaScript目前还处于明显的上升势头,暂时还没人唱衰它。并且WebAssembly仍处于襁褓中,才进入到预览阶段,离真正的发布还有很长的距离。总结而言,笔者建议我们都应该对WebAssembly保持一定的关注,毕竟它会对未来的JavaScript造成极大的影响。如果你对于WebAssembly有兴趣,那么推荐阅读Eric Elliott的相关博客。
  Elm
  笔者个人不太意愿使用Elm,不过其特性还是很有借鉴价值
  2016年不少的开发者参与到Elm的开发中,Elm不仅仅是JavaScript的扩展,而是一门可以编译到JavaScript的编程语言,对于很多热衷于函数式编程的开发者是个不错的选择。参考Elm 入门介绍,Elm提供了如下特性:
  · 并不会存在运行时错误,没有null,没有undefined is not a funtion。
  · 非常友好的错误提示信息能够辅助你开发。
  · 比较严格的代码规范与项目架构,保证了你的应用在快速迭代中依然保持着佳实践。
  · 自动为所有的Elm包添加语义版本描述。
  总而言之,Elm为我们提供了的工具来保证编写干净、简单与碎片化的代码,并且因为Elm是可以编译到JavaScript,因此很多JavaScript开发者都可以保持下关注或者尝试下。
  babili(babel-minify)
  Babili早于2016年8月份发布,它是基于Babel工具链上的支持原生ES6语法的压缩工具。Henry Zhu在这篇文章中称述了为什么我们需要另一个压缩工具,关键点如下:
  目前大部分压缩工具只能
  够处理ES5代码,因此在压缩之前需要先进性编译,而Babili能够支持直接输入ES2015+。随着浏览器性能的提升,越来越多的浏览器支持直接运行ES2015的代码,因此我们不需要再进行转换编译。另外Babili也可以作为Babel preset引入到现有的Babel配置中,也可以作为直接使用的命令行工具。
  这里举个简单的例子,我们编写了如下的ES6类:
  class Mangler {
  constructor(program) {
  this.program = program;
  }
  }
  // need this since otherwise Mangler isn't used
  new Mangler();
  之前,利用传统的Babel进行编译与压缩,会得到如下代码:
  // ES2015 code -> Babel -> Uglify/Babili -> Minified ES5 Code
  var a=function a(b){_classCallCheck(this,a),this.program=b};a();
  而Babili的效果如下:
  // ES2015 code -> Babili -> Minified ES2015 Code
  class a{constructor(b){this.program=b}}new a;
  OCaml
  OCaml本身和JS没啥关系,不过列表接下来的两项都是基于OCaml,因此还是要先介绍下。如果你关注了近两年来的函数式编程崛起之路,你或许听过Haskell。而得益于OCaml能够编译到S,其以后来居上的姿态凌驾于Haskell。Facebook的不少开发者都是OCaml的粉丝,他们的Hack、Flow以及Infer都是基于OCaml构建的。
  BuckleScript
  BuckleScript是基于OCaml实现的服务端框架,由的Bloomberg团队创造而来。Duane Johnson对他们的解释如下:
  BuckleScript或者bsc,是个基于OCaml编译器的相对较新的JavaScript服务端框架。换言之,你可以使用的函数式、自带类型的OCaml语言,同时也能继续背靠基于npm包管理器的Web生态系统。
  我们来简要的看下BuckleScript代码风格,譬如用BuckleScript实现简单的服务端:
let port = 3000
let hostname = "127.0.0.1"
let create_server http =
let server = http##createServer begin fun [@bs] req resp ->
resp##statusCode #= 200;
resp##setHeader "Content-Type" "text/plain";
resp##_end "Hello world "
end
in
server##listen port hostname begin fun [@bs] () ->
Js.log ("Server running at http://"^ hostname ^ ":" ^ Pervasives.string_of_int port ^ "/")
end
let () = create_server Http_types.http
  编译输出为:
'use strict';
var Pervasives = require("bs-platform/lib/js/pervasives");
var Http       = require("http");
var hostname = "127.0.0.1";
function create_server(http) {
var server = http.createServer(function (_, resp) {
resp.statusCode = 200;
resp.setHeader("Content-Type", "text/plain");
return resp.end("Hello world ");
});
return server.listen(3000, hostname, function () {
console.log("Server running at http://" + (hostname + (":" + (Pervasives.string_of_int(3000) + "/"))));
return /* () */0;
});
}
create_server(Http);