NodeJs简介


Node.js优点

优点

1.异步非阻塞的I/O(I/O线程池)

2.特别适用于I/O密集型应用

3.事件循环机制

4.单线程(成也单线程,败也单线程)

5.跨平台

缺点

1.回调函数嵌套太多,太深(俗称回调地狱)

2.单线程,处理不好CPU密集型任务


node中的函数

通过argument.callee.toString()可以看到一个函数“

function (exports, require, module, __filename, __dirname) {}

这个函数是所有模块都有的,node编译时往其中注入5个参数:

exports 暴露模块

require 引入模块

module exports属性暴露模块

__filename 文件的绝对路径

_dirname 文件夹的绝对路径


node中的事件循环模型

  1. 第一个阶段:timers(定时器阶段–setTimeout,setInterval)
  • 开始计时
  • 执行定时器的回调
  1. 第二个阶段:pending callbacks(系统阶段)

  2. 第三个阶段:idle,prepare(准备阶段)

  3. 第四个阶段:poll(轮询阶段,核心)

    • 如果回调队列有待执行的回调函数

      从回调队列中取出回调函数同步执行(一个一个执行),直到回调队列为空了,或者达到系统最大限度

    • 如果回调队列为空

      • 如果有设置过setImmediate,进入下一个check阶段,目的:为了执行setImmediate所设置的回调

      • 如果未设置过setImmediate,在此阶段停留,等待回调函数被插入回调队列,若定时器到点了进入下一个check阶段,目的:为了走第五阶段,随后走第六阶段,随后第一阶段(最后目的)

  4. 第五个阶段:check(专门用于执行setImmediate所设置的回调)

  5. 第六个阶段:close callbacks(关闭回调阶段)


包和包管理器

包实际上就是一个压缩文件,解压以后还原为目录。符合CommonJs规范的目录,应该包含如下文件和文件夹

1.package.json 描述文件(包的说明书,必须要有!!)

2.bin 可执行二进制文件

3.lib js代码

4.doc 文档

5.test 单元测试

npm是什么

全称:Node Package Manager , Node的包管理器

npm常用命令

  • 搜索
npm search xxxxx
  • 安装

1.

npm install xxxx --save
//或
npm i xxxx -S
//或
npm i xxxx

2.

npm install xxxx --asve-dev  
//或
npm i xxxx -D
//安装包并将该包写入到(开发依赖中development)

生产(代码写完了,部署到服务器上,给客户用)依赖(dependendcies):

Jquery、bootstrap等

开发(程序员正在写代码的时候,正在写代码的时候)依赖(devDependencies):语法检查、压缩代码、扩展css前缀,Jquery、编译less的包

注意:某些包既属于开发依赖、又属于生产依赖—例如jquery

npm i xxxx -g //全局安装xxxx包

一般来说,带有指令集的包要进行全局安装,例如:browserify、babel等,全局安装的包,其指令到处可用,如果该包不带有指令,就无需全局安装

查看全局安装的位置:

npm root -g

4.

安装xxxx包的xx版本

npm i xxxx@xxx
  • 移除
npm remove xxxx  //在nodemodule删除xxx包,同时会删除package.json的声明
  • 其他命令
npm aduit fix  //检测项目依赖一些问题,并且尝试修复
npm view xxxx versions //查看远程npm仓库中xxx包所有版本信息
npm view xxx version //查看npm仓库中xxx包最新版本信息
npm ls xxx  //查看我们所安装的xxx包的版本

关于版本号的说明

“^3.x.x”:锁定大版本,以后安装包的时候,保证包是3.x.x版本,x默认取最新的

“~3.1.x”锁定小版本,以后安装包的时候,保证包是3.1.x版本,x默认取最新的

“3.1.1”锁定完整版本,以后安装包的时候,保证包是3.1.1版本


yarn

常用命令

5NfYbF.png


文章作者: Daniel Lin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Daniel Lin !
  目录