zoukankan      html  css  js  c++  java
  • 7.创建及加载模块

    模块(Module)和包(Package)是 Node.js最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分、封装,然后组合起来,模块正是为了实现这种方式而诞生的。
    1.什么是模块;
    2.如何创建并加载模块;
    3.如何创建一个包;
    4.如何使用包管理器;

    1.什么是模块 ==> 一个文件就是一个模块

    模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON或者编译过的 C/C++ 扩展。
    在前面章节的例子中,我们曾经用到了 var http = require('http'),其中 http 是 Node.js 的一个核心模块,其内部是用 C++实现的,外部用 JavaScript 封装。我们通过 require 函数获取了这个模块,然后才能使用其中的对象。

    2.创建模块

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

    // 创建一个模块文件 module.js 
    var  name; 
    exports.setName =  function (thyName) { 
      name = thyName; 
    }; 
    exports.sayHello = function () { 
      console.log('Hello ' + name); 
    };
    

    引入模块, 在同一目录下创建 getmodule.js ,内容是: 

    var  myModule1 = require('./module'); 
    myModule1.setName('Alan'); 
    myModule1.sayHello();   // Alan
    // module.js 通过  exports  对象把 setName 和  sayHello 作为模块的访问接口,
    在 getmodule.js  中通过 require('./module') 加载这个模块,然后就可以直接访问 module.js  中  exports 对象的成员函数了。
    npm提供的上万个模块都是通过这种简单的方式搭建起来的。
    

    没有重装, 后者覆盖前者

    var myModule2 = require("./module.js");
    myModule2.setName("Alan2");
    var myModule3 = require("./module.js");
    myModule3.setName("Alan3");
    myModule1.sayHello();   // Alan3
    myModule2.sayHello();   // Alan3
    myModule3.sayHello();   // Alan3
    

    3.覆盖exports

    有时候我们只是想把一个对象封装到模块中,例如:singleobject.js
    在其他文件中需要通过 require('./singleobject').Hello 来获取
    Hello 对象,这略显冗余

    function  Hello() { 
        var  name; 
        this.setName =  function  (thyName) { 
            name = thyName; 
        }; 
        this.sayHello = function  () { 
            console.log('Hello ' + name); 
        }; 
    }; 
    exports.Hello = Hello;
    

    模块接口的唯一变化是使用 module.exports = Hello 代替了 exports.Hello=Hello。在外部引用该模块时,其接口对象就是要输出的Hello   对象本身,而不是原先的 exports。

    //使用模块接口module.exports ==> hello.js
    function  Hello() { 
      var  name; 
      this.setName =  function (thyName) { 
        name = thyName; 
      }; 
       
      this.sayHello = function () { 
        console.log('Hello ' + name); 
      }; 
    }; 
    module.exports = Hello;
    
    这样就可以直接获得这个对象了 ==> gethello.js
    var  Hello = require('./hello.js'); 
    hello =  new  Hello(); 
    hello.setName('Wu'); 
    hello.sayHello(); 
    // 事实上,exports  本身仅仅是一个普通的空对象,即{},它专门用来声明接口,本质上是通过它为模块闭包①的内部建立了一个有限的访问接口。因为它没有任何特殊的地方,所以可以用其他东西来代替,譬如我们上面例子中的 Hello 对象。 
    

    不可以通过对  exports  直接赋值代替对  module.exports赋值。exports  实际上只是一个和  module.exports指向同一个对象的变量,它本身会在模块执行结束后释放,但module 不会,因此只能通过指定 module.exports  来改变访问接口。

  • 相关阅读:
    Linux如何修改命令提示符
    Linux命令详解-install
    Linux命令详解-info
    Linux命令详解-man
    Linux命令详解-printf
    Linux命令详解-echo
    Linux命令详解-whatis
    Linux命令详解-file
    Linux命令详解-help
    Linux命令详解-type
  • 原文地址:https://www.cnblogs.com/alantao/p/7953828.html
Copyright © 2011-2022 走看看