• Node.js模块定义总结


    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。

    Node.js 提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。

    一模块对外部需要暴露什么样的接口,都是在定义时决定的。

    在模块创建时,我们可以使用exports和module.exports两个方法来暴露接口。大多数时刻,使用两者是等同的,但也有细微的区别 。区别如下:

    1. exports 是指向的 module.exports 的引用;
    2. module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {};
    3. require() 返回的是 module.exports 而不是 exports。

    由于exports 是指向的 module.exports 的引用,所以,当我们想让模块导出的是一个对象时, exportsmodule.exports 均可使用(但 exports 也不能重新覆盖为一个新的对象),而当我们想导出非对象接口时,就必须也只能覆盖 module.exports

    关于node的模块定义有几种不同的写法,大致总结如下:

    返回一个JSON Object

    如下代码是一个简单的示例。

     exp.js:

    var exp = { 
        "name": "jeri", 
        "age": 25, 
        "email":"test@test.com"l,
    };
    module.exports = exp;
    调用方式为:

    app.js:

    var exp = require("./exp");
    console.log(exp.name);

    这种方式可以用于返回一些全局共享的常量或者变量。

    为一个模块,暴露几个方法。

    如下,通常可以返回几个函数:

    exp.js :

    var func1 = function() {
        console.log("func1");
    };
    
    var func2 = function() {
        console.log("func2");
    };
    exports.function1 = func1;
    exports.function2 = func2;
    调用方式为:

    app.js: 

    var functions = require("./exp");
    functions.function1();
    functions.function2();

    返回一个构造函数,也就是一个类

    示例如下:
     
    exp.js.js
    var MyClass = function(args) {
        this.args = args;
    };
    
    MyClass.prototype.func = function() {
        console.log(" MyClass.func");
        console.log(this.args);
    };
    
    module.exports =  MyClass;
    调用方法为

    app.js

    var MyClass = require("./MyClass");
    var example = new MyClass("arguments");

    返回一个普通函数

    如下是一个简单的示例.

    exp.js

    var func = function() {
        console.log("this is a testing function");
    };
    
    module.exports = func;

    调用方法.

    app.js 

    var func = require("./exp");
    func();

    返回一个对象object

    如下是一个简单的示例 

    exp.js

    var MyClass = function() {
        this.sayHello = "hello";
    };
     
    MyClass.prototype.func = function() {
        console.log("I say " + this.sayHello);
    };
    
    module.exports = new MyClass();
    调用方法.

    app.js 

    var obj = require("./MyClass");
    obj.func();

    有时候我们需要模块返回一个单例 singleton. 可以利用上面的方式1和方式4来实现。也就是如下两种形式:

    app.js 

    var MATH = {
        "pi": 3.14,
        "e": 2.72,
    };
     
    module.exports = MATH;
    以及
    var CLASS = function() {
        this.sayHello = "hello";
    };
    
    CLASS.prototype.func = function() {
        console.log("I say " + this.sayHello);
    };
    
    module.exports = new CLASS();
    以上是总结的几种定义模块的方式。
  • 相关阅读:
    常见密码正则表达式
    JavaScript对象获取属性的方法(.和[]方式)
    hasOwnProperty()方法
    Java中List 删除元素
    springboot实现验证码校验
    SpringBoot之后端图形验证码实现
    myBatis插入操作获取不到返回的自增id问题
    java中如何将Object类型转换为int类型
    SpringBoot用户头像上传
    Beanutils.copyProperties( )用法
  • 原文地址:https://www.cnblogs.com/syfwhu/p/5593975.html
Copyright © 2020-2023  润新知