什么是Nodejs
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
(1) 浏览器 vs node
*chrome V8简称V8,是由谷歌开源的一个高性能JavaScript引擎;
NodeJS是基于Chrome V8引擎开发的,实际上它是对GoogleV8引擎进行了封装;NodeJS对一些特殊用例进行了优化,提供了代替的API,使得V8在非浏览器环境下运行的更好;
异:
node里面没有DOM、BOM;
node多了很多的API;
同:
都是chrome V8;
都支持js;
都支持ECMA Script;
(2)Node.js命令
- node --varsion(-v)——查看node版本;
- node File_Name——node文件运行;
- .exit OR 按两次ctrl+c——退出node命令;
- cd …——返回上层目录(cd后为两个".");
- cd File_Name——访问文件夹;
NodeJs常用工具
npm
npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
①允许用户从NPM服务器下载别人编写的第三方包到本地使用。
②允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
③允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。
☆npm命令
("-g"为"-global"意为全局安装;install可缩写为"i";)
- npm -v——查看npm版本;
- npm install npm -g——升级npm版本;
- npm install Module_Name (-g)——安装模块(全局安装);
- npm list——查看安装信息;
- npm uninstall Module_Name——卸载模块;
- npm updata Module_Name——更新模块;
- npm init——初始化(生成package.json文件);
- npm config set registry https://registry.npm,taobao.org——安装淘宝镜像;
- npm install nrm -g——安装nrm(nrm是切换npm源的工具);
- nrm ls——查看可选的源列表;
- nrm test——查看每个源的响应时间;
- nrm use Source——切换源;
- nrm add——添加源;
- nrm del——删除源;
☆nodemon与supervisor
·nodemon
简介:
nodemon工具的作用是监听代码文件的变动,当代码改变之后,自动重启;
下载:
cnpm install nodemon -g;
使用:
nodemon File_Name;
supervisor
简介:
supervisor是一个Linux/Unix系统上的进程监控工具。
supervisor提供了一种统一的方式来start、stop、monitor你的进程,进程可以单独控制,也可以成组控制;
下载:
cnpm install supervisor -g;
使用:
supervisor File_Name;
*注意事项:
问题:supervisor会出现死循环;
分析:内容一直在改变;
解决:vs code关掉自动保存;
nvm
安装:
nvm install version;
例:nvm install v10.8.0 || nvm install 10.8.0 || nvm install latest(最新版本);
切换Node.js版本:
nvm use vsersion;
例:nvm use v10.8.0;
查看当前电脑中Node.js的所有版本:
nvm list;
前段模块化(面试题)
-
CMD(sea.js)
SeaJs是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制;
SeaJs提供常用插件,非常有助于开发调试和性能优化,并具有丰富的可扩展接口;
核心特性
①简单又好的模块定义规范:SeaJs遵循CMD规范,可以像Node.js一般书写模块代码;
②自然直观的代码组织方式:依赖的自动加载、配置的简洁清晰,可以让我们更多地享受编码的乐趣; -
AMD(require.js)
RequireJs是一个JavaScript模块加载器,他非常适合在浏览器中使用。使用RequireJs加载模块化脚本将提高代码的加载速度和质量; -
Common.js
CommonJs API定义很多普通应用程序(主要指非浏览器的应用)使用的API,从而填补了这个空白。 -
es6模块化
在之前的JavaScript中一直是没有模块化系统的,前辈们为解决这些问题,提出了各种规范,最主要的有CommonJs和AMD两种。前者用于服务器,后者用于浏览器。而es6中提供了简单的模块化系统,完全可以取代现有的CommonJs和AMD规范,成为浏览器和服务器通用的模块化解决方案;
CMD和AMD
区别
(1)AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。
CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。
(2)对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行。
CMD推崇依赖就近,AMD 推崇依赖前置。
Node.js中使用了Common.js规范(三类)
一、内置的;
二、第三方的;
三、自定义的;
前端的环境
- 开发环境;
- 生产环境;
- 测试环境;
- 预发布环境;
- 上线环境;
自定义模块的发布
package.json——当前项目的依赖包;
package-lock.json——当前项目依赖包的具体信息;
Node.js是单线程;
关于nodejs的面试题
Q:Node.js中请求数据,需要跨域吗?
A:不需要跨域,由于同源策略;
Q:为什么会出现跨域?
A:开发中会有不同的域名和端口等出现,我们需要去获取他们的内容;
Q:浏览器如何组织跨域?
A:浏览器具有安全策略(同源策略实现);
Q:跨域的范围?
A:浏览器;
Q:为什么要有package.json?
A:帮助我们记录第三方的内容,即使没有node_modules也可以下载;