什么是 Nodejs ?

论坛 期权论坛 期权     
乱冒鼻涕泡儿   2022-5-26 21:11   9116   11


https://www.zhihu.com/video/1039615844782678016
这集来聊什么是 Nodejs ,看看 Node.js 是为了解决什么样的痛点而生的,为啥说它是一个 JS 的运行环境,以及 npm 是什么,为何能引发了 Web 开发的革命。
Node.js 的诞生

先来聊聊 Node.js 诞生的故事,了解一下它最早的定位,以及后来定位的变化。
Node.js 是2009的时候由大神 Ryan Dahl 开发的。Ryan 的本职工作是用 C++ 写服务器,后来他总结出一个经验,一个高性能服务器应该是满足“事件驱动,非阻塞 I/O”模型的。C++ 开发起来比较麻烦,于是 Ryan 就想找一种更高级的语言,以便快速开发。
可以说有两点促成了 Nodejs 的诞生。首先第一点,Ryan 发现 JS 语言本身的特点就是事件驱动并且是非阻塞 I/O 的,跟他的思路正是绝配。第二点,Chrome 的 JS 引擎,也就是 V8 引擎是开源的,而且性能特别棒。于是 Ryan 就基于 V8 开发了 Node.js ,注意 Node.js 听名字好像是个 JS 库,其实不是的,Node.js 是 C++ 开发的,到官网 http://nodejs.org 可以看到
Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境
所以说 Node.js 不是库,是一个运行环境,或者说是一个 JS 语言解释器。
Node.js 最初的定位是提升 Ryan 自己的日常工作效率,也就是用来写服务器代码的,但是后来没有想到的是 Node.js 在前端领域却大放异彩。
先说几句 Node.js 在服务器端的发展。Node.js 的诞生带给人们的是个大大的惊喜,传统上 Web 开发者,前端用 JS 写,但是写服务器端代码的时候还必须用另外一种语言,类似 Ruby/Java/PHP 等。但是 Node.js 出现之后,JS 前后通吃了。如果去网上搜 Node.js 的资料,很多都是用 Node.js 去写服务器代码的。
但是,Node.js 今天也成为了 Web 前端开发必不可少的基础设施。注意,Web 前端的 JS 代码最终还是运行在浏览器中的,所以运行的时候,或者说在产品环境下,不依赖于 Node.js 。但是,Node.js 诞生以后,前端大爆发,类似 React/Vuejs 这样的前端框架的开发环境变得非常强大和负责,Node.js 是这些开发环境运行的基础。
这就是关于 Node.js 诞生,以及它如何从纯后端发展到前后通吃的故事。
Nodejs 中运行 JS 代码

接下来,演示一下 Nodejs 中如何运行 JS 代码。
以前 JS 只能运行在浏览器中,Node.js 出现之后,不管是服务器上,还是我们自己的的笔记本上,只要安装了 Node.js 就可以运行 JS 代码了。假设,咱们已经安装好了 Node.js ,那么进入命令行,
node
执行 node 命令,就可以进入 Node.js 的交互环境。
1 + 1执行加法操作,回车,就可以看到代码正确执行了。Ctrl-D 可以退出这个交互环境。
但是更为常见的一种执行方式,是把把代码写入到一个文件中。
app.js
console.log("hello");然后这样来在命令行中执行
node app.js就可以看到 hello 被打印出来了,而这样过程跟浏览器没有一毛钱关系。
另外有一点是要特别注意的。Node.js 和浏览器是不同的环境,是有着很多细小的差异的。首先,二者各自包含的全局变量不同。document 对象是用来操作页面的,所以只有浏览器环境下才可以直接使用。但是如果是要放到 Node.js 环境下运行代码,就不要使用 document 。同样的道理,Node.js 中可以直接拿来使用的 http 对象,在浏览器环境下就没有。其次,Node.js 和浏览器对 ES6 新特性的支持程度也是不同的,这一点也要注意。
关于如何在 Node.js 环境下运行 JS 代码,我们就聊到这里。
npm 是世界上最大软件包仓库

最后来聊 npm 。Node.js 引发了前后端开发的爆发,尤其是前端。 JS 开发者众多,所以贡献开源代码的人就非常多,所有这些凝结成了 npm 这个世界上最大的软件包仓库。
npm 是 Node Package Manager 的缩写,意思是 Node 的包管理系统。Nodejs 现在如日中天,其中 npm https://www.npmjs.com/ 这个功不可没。在这里,我们要实现各种功能几乎都能找到现成的别人写好的包,直接拿了用就好了。
很多 npm 包都对应一个 Github 项目,但是如果只有代码,那么使用起来还不是特别方便。而当系统上安装好了 Node.js 之后,就会配套安装一个命令,叫做 npm 。
npm install moment执行 npm install moment 就可以把 moment 这个包从 npm 的软件包仓库中下载这个包,然后安装到本地了。而 npm 的软件包仓库中,有数以万计的 moment 这样的包。
关于 npm ,我们就聊到这里。
总结

什么是 Node.js 这集主体内容就是这么多了。总结一下:首先,Nodejs 是基于 Chrome 的 V8 引擎开发的一个 C++ 程序,目的是提供一个 JS 的运行环境。最早 Nodejs 主要是安装在服务器上,辅助大家用 JS 开发高性能服务器代码,但是后来 Nodejs 在前端也大放异彩,带来了 Web 前端开发的革命。Nodejs 下运行 JS 代码有两种方式,一种是在 Node.js 的交互环境下运行,另外一种是把代码写入文件中,然后用 node 命令执行文件代码。Nodejs 跟浏览器是不同的环境,写 JS 代码的时候要注意这些差异。最后,我们介绍了 npm ,通过 npm 装包的方式,开发中我们再也不用重造轮子了。
参考:

  • https://nqdeng.github.io/7-days-nodejs/
  • https://nodejs.org/en/
分享到 :
0 人收藏

11 个回复

倒序浏览
2#
k50dzg  1级新秀 | 2022-5-26 21:12:11 发帖IP地址来自 中国
介绍的太简单,没有说清楚node.js的特点,开发前后端有何的优势,一句“大放异彩”就带过了。
3#
xshijie  1级新秀 | 2022-5-26 21:12:44 发帖IP地址来自 北京
介绍npm的时候可以和传统语言的包管理机制比较一下,比如jar包什么的。依赖管理也是npm相比传统语言有优势的地方
4#
s703jb  1级新秀 | 2022-5-26 21:13:42 发帖IP地址来自 北京
工作岗位还是太少,这才是大众所关注的,追求技术,抱歉,我不会
5#
jvl_  1级新秀 | 2022-5-26 21:14:34 发帖IP地址来自 中国
这篇文章的内容,已经被包含在千万篇博客中了。而且,Node.js也是非常老的技术,初级科普文已然不再新鲜。这时候,写一篇deno项目的科普文,也许更吸引眼球。
6#
o76fuz  1级新秀 | 2022-5-26 21:15:28 发帖IP地址来自 四川成都
js是事件驱动,支持非阻塞io啥意思
7#
ronniesheng1981  1级新秀 | 2022-5-26 21:15:43 发帖IP地址来自 北京
那些个吐槽作者文章的,来,请开始你们的表演,自己写一篇让大家都能看懂的入门文章
8#
buny2  1级新秀 | 2022-5-26 21:16:06 发帖IP地址来自 广东珠海
事实上,即使没有nodejs,三大前端框架也会在前端大放光彩。前端爆发的原因是浏览器js性能的提升,与nodejs没有半毛钱关系。反而是前端框架的流行成就了现在的nodejs,如果不是前端能够承担一部分业务逻辑,谁会在意前后代码统一。
9#
wwnkh  1级新秀 | 2022-5-26 21:16:12 发帖IP地址来自 北京
我感觉作者讲的很好。适合前端学习
10#
hnm5jc  1级新秀 | 2022-5-26 21:16:21 发帖IP地址来自 中国
你来写一个啊?装啥大神
11#
2mb  1级新秀 | 2022-5-26 21:16:58 发帖IP地址来自 中国
你在说啥...难道不是后面导致前面么
12#
aanfx  1级新秀 | 2022-5-26 21:17:52 发帖IP地址来自 北京
感谢作者解决了我这个门都没入的只是想了解什么是什么的小白白的疑惑!(((*) 作者真棒!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:36
帖子:15
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP