前言
这集来聊什么是 Nodejs ,
看看 Node.js 是为了解决什么样的痛点而生的,
为啥说它是一个 JS 的运行环境,
以及 npm 是什么,
为何能引发了 Web 开发的革命。
什么是 Nodejs
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 诞生,以及它如何从纯后端发展到前后通吃的故事。
Mac 安装nodejs
这几日因为需求需要又临时用到nodejs,之前安装过好几次,但是每次还是忍不住百度下,所以这次在此mark下 Mac 下 nodejs 的安装和检验,给自己留个标记,提高下以后的效率。
step 1:下载
访问nodejs官网,点击蓝色选框区域稳定版,并下载https://nodejs.org/en/
step 2:安装
双击刚下载的文件,按步骤默认安装就行
这个安装很简单,就是下载安装包,然后点击按照提示下一步,安装就行了,
step 3:验证安装
安装完成后打开终端,输入
npm -v
node -v
两个命令,如下图出现版本信息,说明安装成功。
这是因为只要安装了nodejs,就安装了npm包管理器,这两个是绑定在一起的,
Nodejs 中运行 JS 代码
接下来,演示一下 Nodejs 中如何运行 JS 代码。
使用node命令行
以前 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文件,nodejsTest.js , 输入下面的代码, 并保存
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {
"Content-Type" : "text/plain"
});
response.write("Welcome to Nodejs");
response.end();
}).listen(8000, "127.0.0.1");
console.log("Creat server on http://127.0.0.1:8000/");
打开终端进入 nodejsTest.js 所在目录, 输入 node nodejsTest
打开浏览器,点击或者输入http://127.0.0.1:8000/, 如果无法打开,可以去掉.listen(8000, “127.0.0.1”) 中得ip监听改成 .listen(8000),然后点击或者输入http://localhost:8000/
node升级:用n升级nodejs(建议使用此方法)
# 查看当前node版本
$ node -v
# 清除npm缓存
$ npm cache clean -f
# 全局安装n
$ npm install -g n
# 升级到最新稳定版
$ n stable
# 升级到最新版
$ n latest
# 升级到定制版
$ n v14.6.0
# 切换使用版本
$ n 13.10.0 (ENTER)
# 删除制定版本
$ n rm 13.10.0
# 用制定的版本执行脚本
$ n use 13.10.0 some.js
输入n,可以进入交互界面,会显示你安装了哪些node版本,可以选中和删除,
# 升级完成查看 node版本
$ node -v
注意:
如果在第一步安装n模块报错npm ERR! code EBADPLATFORM
遇到这样错误信息,先将生成的node_modules文件夹删除,再在命令后面加上 --force重新运行;
如:npm install --force即可;
如果不行,再反复执行上面的步骤。
nodejs具有划时代的意义
就前端来说nodejs具有划时代的意义,做前端的没用过nodejs都不好意思说自己是前端,
做后端的没听过nodejs,或者说不出nodejs和java的优缺点,也不是一个合格的后端。
nodejs不是一个js框架,千万不要认为是类似jquery的框架,
nodejs是js运行时,运行环境,类比java中jvm,
java的开端是什么,无疑是jvm,自从有了jvm,java才能吹牛说自己是“一次编写处处运行”,
不管你是windows还是linux,只要安装了对应版本的jvm都可以运行.class文件。
同样nodejs的作用和jvm的一样一样的,也是js的运行环境,不管是你是什么操作系统,
只要安装对应版本的nodejs,那你就可以用js来开发后台程序。
这具有划时代的意义,意味着一直以来只能在浏览器上玩来玩去的js,可以做后端开发了,
从有了nodejs后就催生出一大批用js做后台开发的前端人员,这部分人员就是偏前端的“全栈程序员”。
记住,nodejs是和jvm同等地位的js运行环境,打开了前端人员走向后端的道路。
vue和node
vue.js为什么要在nodejs中安装?为什么要在nodejs中npm install vue呢?
第一,首先vue.js 是库,不是框架,不是框架,不是框架。vue.js 有路由的 叫vue-route.js,vue.js也有数据请求 叫vue-resource.js,用上vue-router vue-loader就是框架
第二,vue.js 下载过来直接在html中引入就好了并不一定要npm install vue.
前端文件也是放在服务端的呀,npm install的vue用来被webpack打包进前端js。
Vue.js可以在html里引用,使用npm引入是方便包管理。
等到应用需要的库和框架多起来后,一个个从html里引入就不方便了。
所以用到打包工具比如webpack,可以直接require引入之后将不同模块打包成单个js文件。同时这些工具提供各种自动化处理,让前端开发更爽。
最后Vue.js是数据驱动,和JQuery思路不同,你几乎不需要自己进行复杂低效的dom操作,开发简介明了。从这一点上说,可以基本抛弃JQuery了。
技术改变命运