likes
comments
collection
share

nodeJs到底是什么?

作者站长头像
站长
· 阅读数 29

什么是JavaScript?

JavaScript 是一种语言,JavaScript的标准是 ECMAScript。

什么是 ECMAScript?

我们说的 ES5, ES6……就是指的 ECMAScript 不同标准。ECMAScript 只是一个标准,而JavaScript是对这个标准的实现。

为啥不继续叫 JavaScript?

因为 Oracle 拥有 Java 和 JavaScript 的商标权。(这部分感谢评论区 @杨栋 的斧正)在 ECMA-262 最新的标准手册 里,通篇只有一处有 JavaScript。

ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invented by Brendan Eich at Netscape and first appeared in that company's Navigator 2.0 browser. It has appeared in all subsequent browsers from Netscape and in all browsers from Microsoft starting with Internet Explorer 3.0.

什么是NodeJS?

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient. Node.js' package ecosystem,npm, is the largest ecosystem of open source libraries in the world.

NodeJS 是基于Chrome V8引擎的 JavaScript 运行环境。NodeJS使用事件驱动,非阻塞型I/O。NodeJS的包管理生态是 NPM,是现在世界上最大的开源程序包库。

额……还是不明白NodeJS有啥特殊的?

JavaScript是一门脚本语言,它需要一个运行环境。就好像PHP需要Apache,JSP需要Tomcat等等(例子不全面,仅供理解)…… 而NodeJS之前,JavaScript运行环境是浏览器,也就是JavaScript在网页中才能跑起来。NodeJS之后JavaScript又多了一个运行环境,就是NodeJS。

具体一点……NodeJS有啥特殊的?

由于NodeJS的最底层是Chrome的V8引擎,然后libuv封装了一些I/O的线程池管理和网络的I/O操作,这部分是C/C++写的。简单来说NodeJS可以控制系统文件的读写,网络的输入输出。所以NodeJS又可以被单纯的认为是一个可以运行 JavaScript 的服务器。(例子不全面,仅供理解)

那……NodeJS和VueJS,还有ReactJS,还有AngularJS有啥区别的?

这些工具的起源和诞生几乎浓缩了前端的发展历程,因为 NodeJS 可以读写文件,监听网络输入输出。所以 NodeJS 和 VueJS、ReactJS、AngularJS 有非常本质的区别。NodeJS 是可以运行 JavaScript 的环境,剩下三个是用 JavaScript 写的库。

一般NodeJS被用在哪里?

目前NodeJS大多被用于前端开发的开发环境。以Webpack作为例子,webpack是一个运行在 NodeJS 端的打包工具,它帮你把你写的 a.js, b.js, c.js ... 打包成一个 bundle.js。而这种打包的第一步是读取(文件读取能力)你的a.js, b.js, c.js ...,所以只能在 NodeJS 环境下做。

当然这中间的步骤会更麻烦,比如你的 a.js 用了最新的 ES7 语法 async/await,在旧版本的浏览器会导致错误,所以打包过程基本上是

// 源代码
const getJson = async () => { 
  let response = await ajax(URL); 
  console.log(response);
  return response; 
}

// 转义
function getJson() {
  var response;
  return new Promise(function(resolve, reject){
    return ajax(URL).then(function(res){
      response = res;
      console.log(response);
      resolve(response);
    })
  })
}

而这些都是 运行在 NodeJS 环境下的 Webpack 去做的。

那 vue-cli 和 NodeJS 有啥联系?

vue-cli,react-cli 和 ng-cli 都是运行在 NodeJS 环境下的脚手架。也就是说我们不可以直接在浏览器里运行 vue-cli。因为有了文件读写的能力,所以 vue-cli 可以帮我们集成(或者打包)vue核心模块,并将我们的代码转义,压缩。

所以 vue-cli 是 运行在 NodeJS 环境下 帮助我们开发 基于Vue框架的项目 的脚手架。

NodeJS 还能做啥?

用JS做服务器: Express / EggJS / HAPI / Koa 等等可以了解下

用JS做移动端混合应用:PhoneGap / Cordova / Ionic 了解下

用JS做移动端原生应用:React-Native / NativeScript / WEEX 了解下

那么看完这篇回答的我应该做些什么?

1)尝试学习一个 NodeJS 框架

2)尝试了解框架的实现原理

转载自:https://segmentfault.com/a/1190000039889332
评论
请登录