这集来聊什么是 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/

什么是 Nodejs的更多相关文章

  1. NodeJs之OS

    OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...

  2. NodeJs之Path

    Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...

  3. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. NodeJs之child_process

    一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...

  6. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  7. 图片访问实时处理的实现(nodejs和php)

    我在访问时光网.网易云音乐等网站时,发现将它们页面中的一些图片URL修改一下就可以得到不同尺寸的图片,于是思考了其实现方案,我的思路是:URL Rewrite + 实时处理 + 缓存,对用户请求的UR ...

  8. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  9. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  10. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

随机推荐

  1. git在idea中的冲突解决(非常重要)

    1.什么是冲突 冲突是指当你在提交或者更新代码时被合并的文件与当前文件不一致.读起来有点绕,结合下面的案例理解. 从上面对冲突的定义来看,冲突时发生在同一个文件上的. 2.生产上冲突的场景 常见冲突的 ...

  2. IntersectionObserver + scrollIntoView 实现电梯导航

    电梯导航也被称为锚点导航,当点击锚点元素时,页面内相应标记的元素滚动到视口.而且页面内元素滚动时相应锚点也会高亮.电梯导航一般把锚点放在左右两侧,类似电梯一样.常见的电梯导航效果如下,比如一些官方文档 ...

  3. 神经网络之卷积篇:详解Padding

    详解Padding 为了构建深度神经网络,需要学会使用的一个基本的卷积操作就是padding,让来看看它是如何工作的. 如果用一个3×3的过滤器卷积一个6×6的图像,最后会得到一个4×4的输出,也就是 ...

  4. Python 开发中,使用bcrypt 或 Passlib 对系统用户密码进行哈希和验证处理

    在设计一个系统的时候,肯定都有会有用户身份认证的问题,一般对用户校验的时候,都是对用户存在数据库总的密码哈希值进行判断,从而避免密码泄露和反向解密,那么在Python 开发中,我们可以引入bcrypt ...

  5. Win32封装对话框类

    [主程序入口.cpp] #include <windows.h> #include <tchar.h> #include "resource.h" #inc ...

  6. idea下spring切换jdk版本

    1.首先打开项目配置设置 2. 修改project中的配置 3. 修改modules中的配置 这个方法不需要修改pom.xml文件 如果有问题请指正   及时修改 2022年9月10日16:42:16

  7. 全网最适合入门的面向对象编程教程:38 Python常用复合数据类型-使用列表实现堆栈、队列和双端队列

    全网最适合入门的面向对象编程教程:38 Python 常用复合数据类型-使用列表实现堆栈.队列和双端队列 摘要: 在 Python 中,列表(list)是一种非常灵活的数据结构,可以用来实现堆栈(st ...

  8. Shell 目录栈操作

    Shell 目录栈允许你将一系列目录压入栈中,然后方便地在这些目录之间进行切换.以下是一些常见的命令及其用途: 常见命令 pushd:将当前目录压入栈中,并切换到指定目录. popd:从栈中移除顶部的 ...

  9. [深度学习] 时间序列分析工具TSLiB库使用指北

    TSLiB是一个为深度学习时间序列分析量身打造的开源仓库.它提供了多种深度时间序列模型的统一实现,方便研究人员评估现有模型或开发定制模型.TSLiB涵盖了长时预测(Long-term forecast ...

  10. devops-3:Jenkins增加静态节点

    Jenkins管理静态节点 Jenkins搭建完成后一般只有一个master节点,此节点主要用于管理Jenkins配置,如果再在master节点上跑一系列的Job,未免有点太勉强,并且如果出现资源紧缺 ...