• Node.js


    Node.js

     

     

     Node.js不是JS文件,也不是一个JS框架,而是Server side JavaScript runtime,服务器的一个JS运行时

     Node.js是一个基于Chrome v8 引擎的JavaScript运行环境

     Node.js使用了一个事件驱动、非阻塞式的I/O模型,使其轻量又高效。

     Node.js的包管理器nmp,是全球最大的开源库生态系统

     

    NVM

    Nodejs下载安装[不建议]

    NPM

    NPM镜像

    cnpm

    启用交互解释器

    nrm

    Nodesjs由哪几部分组成

    事件循环

    事件驱动程序

    EventEmitter

     

     

    NVM

    Nodejs的版本管理工具(Node Version Manager),由于Nodejs迭代速度特别快,不同的项目可能需要不同的版本,NVP就类似Python中Anaconda?可以管理不同的Python版本?

    nvm可以很方便管理node的版本

    npm可以很方便的管理node所需包

     

    windows:https://github.com/coreybutler/nvm-windows/releases下载zip文件即可

    linux:https://github.com/creationix/nvm

    简单使用:https://www.jianshu.com/p/8671e439a811

     

    配置淘宝镜像:

    由于nvm下载node时太慢,我们在其中添加淘宝镜像

    windows在nvm安装包下的settings文件下配置如下:

    root: D:
    vm_setup
    vm
    path: D:
    vm_setup
    odejs
    arch:64
    proxy:none
    node_mirror: https://npm.taobao.org/mirrors/node/
    npm_mirror: https://npm.taobao.org/mirrors/npm/

    linux配置nvm下载node环境的镜像

    - 在用户环境变量下加入,激活
        export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
    - 配置node环境的npm镜像
        - 打印默认的 registry 地址
            npm config -g get registry
            # https://registry.npmjs.org/
        - 设置淘宝镜像
            npm config -g set registry https://registry.npm.taobao.org
        

    下载node:

    nvm install v7.9.0  #命令后加版本号就可以进行安装,字母v可以不写,如下图

    卸载:

    nvm uninstall v7.9.0

    查看当前正在使用的node版本:

    首先启动nvm,不启动nvm在控制台输入node会报node不是内部或外部命令。

    nvm on # 输入后会打印nvm已启动,并且显示当前正在使用的版本

    关闭nvm:

    nvm off # 关闭nvm后,系统就会屏蔽对node的使用

    切换node版本:

    nvm use v7.8.0

    Nodejs下载安装[不建议]

    建议使用nvm去安装(nvm install node版本号)!

    傻瓜式安装-安装后命令行输入:path,可以查看到安装过程中已经将nodejs路径加入了path中

     

    NPM

    由于node是亲内核的,本事没有这么多功能,但是有很多包,但是包和包直接存在依赖,我们需要一个工具帮我们管理包。这就需要使用NPM了。

    类似java的maven,是随同Nodejs一起安装的包管理工具,能解决Nodejs代码部署上的很多问题。

     使用场景

     允许用户从NPM服务器下载别人编写的第三方包到本地使用。

     允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

     允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

    注意:新版的nodejs已经集成了npm,输入npm -v即可查看是否安装成功。

     

     配置

    window下修改npm安装包的全局路径(类似于maven的setting文件中安装包的全局路径),新建.npmrc文件,内容如下:

    cache=E:
    vm-setup
    pmcache
    prefix=E:
    vm-setup
    pm
    epository

    cache表示缓存目录,prefix表示npm包安装目录。然后将该文件丢到user/admin目录下。然后判断是否设置成功:命令行:

    npm config list

    如果打印出自己所配置的内容,就代表设置成功。以后在使用npm install -g <package modul>安装全局包时就会安装在这个配置的目录下(-g:global)。

    然后将prefix对应的目录设置到环境变量中。

     

     常用命令

     windows下安装/升级npm:

    npm install npm -g

     linux下升级/安装

    sudo npm install npm -g

     使用npm安装模块:

    npm install <Module Name>
    // @版本号  下载对应版本号的模块
    // --save 保存到package文件。  如果有了package文件,打包项目可以直接删除node_modules模块,当别人使用时,可以直接在项目中使用nmp install命令自动读取package.json,生成新的node_modules模块。其实就是在package.json里添加了这个模块的依赖。
    // --save-dev 表示在开发环境下使用

     何为开发依赖?何为项目依赖?

    npm提供了一些工具包:gulp,我们自己做的东西跟他没关系,但是开发时候需要用到,gulp就属于开发阶段的依赖。boostrap,我们做的页面用到了这个包,bootstrap就是任何环节都依赖,这是项目依赖。当生成package文件的时候,将项目打包给别人的时候(没有node_modules),别人会通过npm install初始化package中所需要的包,这时候不会去安装开发依赖所需要的包】

    例如:使用npm 安装常用的Nodejs web框架模块express

    npm install express

    安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。

    其类似于maven ,也会将依赖的包一起添加进来。

     

     全局安装与本地安装

    类似java maven的全局库与本地库吧。

        npm install express          # 本地安装
        npm install express -g   # 全局安装

    如果出现错误:

    npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 

    解决办法:

    $ npm config set proxy null
    

     本地安装

     将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。

     可以通过 require() 来引入本地安装的包。

     全局安装

     将安装包放在 /usr/local 下或者你 node 的安装目录。

      可以直接在命令行里使用。

     

     如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link。

     

     查看安装信息:

    npm list -g

    查看某个模块的版本号:npm list 模块名

     

     使用package.json

    package.json 位于模块的目录下,用于定义包的属性。

    例如上面安装的express模块:【node_modules/express目录下】

     

     

     卸载模块、更新模块、搜索模块

    npm uninstall <Module Name>
    npm update <Module Name>
    npm search <Module Name>

     创建模块

    创建模块,package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件,生成的文件包含了基本的结果。

     项目根目录下执行

    npm init

    然后根据提示输入你要创建模块的信息,最后yes,生成的package.json就在项目的根目录下。(使用npm init --yes可生成默认的package.json文件)

     

     注册npm资源库【username:liuwei04  password:常用密码之一  邮箱:qq邮箱】

    npm adduser

     发布自己的模块

    npm publish

    如果你以上的步骤都操作正确,你就可以跟其他模块一样使用 npm 来安装。先创建自己的模块,然后发布到远程npm库上,再用时就使用npm install yourpackageName【要先npm login】

     

     

    NPM镜像

     

    cnpm

    npm install -g cnpm --registry=https://registry.npm.taobao.org

    启用交互解释器

    npm

    类似windows/linux终端,或者mongoDB的终端【mongo.exe】

     

     

    nrm

    nrm的作用:提供了一些最常用的NPM包镜像地址,能够让我们快速的切换安装包时候的服务器地址;

    什么是镜像:原来包刚一开始是只存在于国外的NPM服务器,但是由于网络原由,经常访问不到,这时候,我们可以在国内,创建一个和官网一样的NPM服务器,只不过,数据都是从人家那里拿过来,除此之外,使用方式完全一样;

     

    1、运行:

    npm i nrm -g # 全局安装nrm包

    2、使用:

    nrm ls # 查看当前所有可用的镜像源地址以及当前所使用的镜像源地址

    3、使用:

    nrm use npm 或 nrm use taobao # 切换不同的源地址

     

    nrm只是提供不同的源地址,真正下载安装还是使用npm命令去装,只是从nrm指定的镜像源里下载罢了。

     

    Nodesjs由哪几部分组成

     引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。【类似于java中的import】

     创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

     接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

    案例:

    var http = require('http');
    
    http.createServer(function (request,response) {
        // 发送HTTP头部
        //HTTP状态值:200:OK
        //内容类型:text/plain
        response.writeHead(200,{'Content-Type':'text/plain'});
    
        //发送相应数据“Hello World”
        response.end("Hello World
    ");
    }).listen(8888);
    
    //终端打印如下信息;
    console.log('Server running at http://127.0.0.1:8888/')
    
    // 在server.js所在目录启动终端:运行node server.js,即可启动服务器

     Nodejs回调函数

    Node.js 异步编程的直接体现就是回调。

    异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。

    回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。

    例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

     

    回调函数一般作为函数的最后一个参数出现:

    function foo1(name, age, callback) { }
            function foo2(value, callback1, callback2) { }

    事件循环

    Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。

    Node.js 几乎每一个 API 都是支持回调函数的。

    Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现

    Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.

     

    事件驱动程序

    Node.js 使用事件驱动模型,当web server接收到请求,就把它关闭然后进行处理,然后去服务下一个web请求。

    当这个请求完成,它被放回处理队列,当到达队列开头,这个结果被返回给用户。

    这个模型非常高效可扩展性非常强,因为webserver一直接受请求而不等待任何读写操作。(这也被称之为非阻塞式IO或者事件驱动IO)

    在事件驱动模型中,会生成一个主循环来监听事件,当检测到事件时触发回调函数。


    整个事件驱动的流程就是这么实现的,非常简洁。有点类似于观察者模式,事件相当于一个主题(Subject),而所有注册到这个事件上的处理函数相当于观察者(Observer)。

     

    EventEmitter

    events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。

     

    功能的封装。

     

    前进时,请别遗忘了身后的脚印。
  • 相关阅读:
    git 查看远程分支、本地分支、删除本地分支
    iOS edgesForExtendedLayout、extendedLayoutIncludesOpaqueBars、automaticallyAdjustsScrollViewInsets属性详解
    【iOS开发】UIWebView与JavaScript(JS) 回调交互
    iOS打印Debug日志的方式
    iOS项目上传到AppStore步骤流程
    IOS开发之实现App消息推送(最新)
    DKNightVersion 的实现 --- 如何为 iOS 应用添加夜间模式
    用Session实现验证码
    HTTP中Get与Post、ViewState 原理
    ASP.NET获取服务器文件的物理路径
  • 原文地址:https://www.cnblogs.com/liudaihuablogs/p/13468411.html
Copyright © 2020-2023  润新知