乐趣区

关于node.js:nodeJs到底是什么

什么是 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)尝试理解框架的实现原理

退出移动版