node.js学习笔记三

node.js 学习笔记三

node.js的事件循环机制

Node.js 在什么时候会进入事件循环呢?答案是 Node.js 程序由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数,所以 Node.js 始终在事件循环中,程序入口就是事件循环第一个事件的回调函数。事件的回调函数在执行的过程中,可能会发出 I/O 请求或直接发射(emit)事件,执行完毕后再返回事件循环,事件循环会检查事件队列中有没有未处理的事件,直到程序结束

事件循环 –> 回调函数 –> 磁盘I/O/网络通信/数据库查询 –> 时间循环队列 –> 事件循环 –> 回调函数

模板和包

  • 模块(Module)和包(Package)是 Node.js 最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分、封装,然后组合起来,模块正是为了实现这种方式而诞生的。模板都是基于文件的,机制很简单.可以把包理解为实现了某个功能的模块的集合

  • 什么是模块

模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个
Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展。

  • 创建模块

在 Node.js 中,创建一个模块非常简单,因为一个文件就是一个模块,我们要关注的问
题仅仅在于如何在其他文件中获取这个模块。Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

新建一个module.js文件
    var name;

    exports.setName = function(thyname) {
        name = thyname;
    };
    exports.sayHello = function(){
        console.log('hello! ' + name + ' how are you ! ');
    };
新建一个getModule.js文件
    var ksir = require('./module');
    ksir.setName('ksir');
    ksir.sayHello();

不管getModule.js调用module模块多少次,只会加载一次

创建包

包是在模块基础上更深一步的抽象,Node.js 的包类似于 C/C++ 的函数库或者 Java/.Net
的类库。它将某个独立的功能封装起来,用于发布、更新、依赖管理和版本控制。Node.js 根
据 CommonJS 规范实现了包机制,开发了 npm来解决包的发布和获取需求。
Node.js 的包是一个目录,其中包含一个 JSON 格式的包说明文件 package.json。严格符
合 CommonJS 规范的包应该具备以下特征:

  • package.json 必须在包的顶层目录下;
  • 二进制文件应该在 bin 目录下;
  • JavaScript 代码应该在 lib 目录下;
  • 文档应该在 doc 目录下;
  • 单元测试应该在 test 目录下。

在写包的时候,尽量按照 CommonJS 的规范

一个模块除了是一个js文件外,还可以是一个文件夹


    //somepackage/index.js
    exports.hello = function() {
    console.log('Hello.');
    };
    然后在 somepackage 之外建立 getpackage.js,内容如下:
    //getpackage.js
    var somePackage = require('./somepackage');
    somePackage.hello();

此外,还可以将目标文件放在lib文件内,将该地址放在package.json文件中的main键值中

    {
    "main" : "./lib/interface.js"
    }

3 创建全局链接

我们用npm安装的全局包是不能够被我们require到的,只有本地安装的包才可以,当我们的系统原来安装了全局包,可以通过npm link [packageName] 来移植到node_modules中.不过改名了在window系统是不受支持

赞 赏
微信扫一扫