• commonjs 规范


    CommonJS规范

    1. 概述

    Node程序由许多个模块组成,每个模块就是一个文件。Node模块采用了CommonJS规范。

    根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的。

    //example.js
    var x = 5;
    var addX = function(value) {
        return value + x;
    }
    在上述代码中,变量x和addX, 是当前文件example.js私有的,其他文件不可见的.
    如果想在多个文件中共享变量,可以使用:
    global.warning = true;
    上面代码的warning变量,可以被所有文件读取,当然,这种写法是不推荐使用的.

    CommonJS规定,每个文件的对外接口是module.exports对象.这个对象的所有属性和方法,都可以被其他文件导入.
    var x = 5;
    var addX = function(value)_ {
        return value + x;
    }
    module.exports.x = x;
    module.exports.addX = addX;
    上面代码通过module.exports对象,定义对外接口,输出变量x和函数addX.module.exports对象是可以被其他文件导入的,它其实就是文件内部和外部通信的桥梁.
    //test.js
    var example = require("./example");
    console.log(example.x);
    console.log(example.addX(10));

    2. module对象
    每个模块内部,都有一个module对象,代表当前模块.它有以下属性:
    module.id: 模块的标识符,通常是带有绝对路径的模块文件名;
    module.filename: 模块的文件名,带有绝对路径;
    module.loaded: 返回一个布尔值,表示模块是否已经完成加载;
    module.parent: 返回一个对象,表示调用该模块的模块;
    module.children: 返回一个数组,表示该模块要用到的其他模块;

    3. module.exports属性
    module.exports属性表示当前模块对外输出的接口,其他文件加载该模块时,实际就是读取module.exports变量

    4. exports变量
    为了方便,Node为每个模块提供了一个exports变量,指向module.exports,这等同于每个模块头部,都有这样一句:
    var exports = module.exports;

    5. AMD规范与commonjs规范的兼容性:
    CommonJS规范加载模块是同步的, 也就是说,只有加载完成, 才能执行后面的操作.AMD规范则是非同步加载模块,允许指定回调函数.由于NODEJS主要用于服务器编程,模块文件一般都已经存放在本地,所以加载起来比较快,不用考虑非同步的加载方式,所以commonjs规范比较适用.但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式, 因此浏览器端一般采用AMD规范.

    6. require用法:
    require的基本功能是,读入并执行一个JAVASCRIPT文件,然后返回该模块的exports对象,如果没有发现指定模块,会报错.

    模块的缓存: 第一次加载某个模块时,node会缓存该模块,以后再加载该模块,就直接从缓存取出该模块的exports属性;

  • 相关阅读:
    drf—— 序列化组件
    drf—— RESTful API规范
    drf——APIView及其内部函数/类的源码分析
    drf—— drf的安装和使用
    226翻转二叉树
    51,N皇后
    557反转字符串中的单词III
    17.电话号码的字母组合
    459重复的子字符串
    419递增子序列
  • 原文地址:https://www.cnblogs.com/luowen075/p/6060235.html
Copyright © 2020-2023  润新知