zoukankan      html  css  js  c++  java
  • commonjs

    • commonJS概述
    1.文件即为模块

    每个文件都是一个作用域,文件里面定义的变量函数都是私有的,

    对其他模块都是不可见的;

    2.使用module.exports (exports) 暴露对外的接口.

    module变量代表当前模块,module是一个对象,使用这个对象属性exports 暴露对外的接口;

    3.使用require 同步加载依赖模块

    4.模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

    5.模块加载的顺序,按照其在代码中出现的顺序

    6.每个模块内部,都有一个module对象,代表当前模块。它有以下属性。

    7.module.exports属性

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

    8.exports变量

      为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令:

      var exports = module.exports;(commonJS隐式做了这个赋值)

      这样做的好处是,在对外输出模块接口时,可以向exports对象添加方法暴露出去。

    • 示例

    util.js

    module.exports = function say() {
        console.log('hello world');
        console.log(module.id) //模块的识别符,通常是带有绝对路径的模块文件名。
        console.log(module.loaded) //返回一个布尔值,表示模块是否已经完成加载。
        console.log(module.children) //返回一个数组,表示该模块要用到的其他模块。
        console.log(module.exports) //表示模块对外输出的值。
    }

    main.js

    var say = require("./util");
    say();

    也可以这样写:

    util.js

    function say(){
        console.log('hello world');
        console.log(module.id) //模块的识别符,通常是带有绝对路径的模块文件名。
        console.log(module.loaded) //返回一个布尔值,表示模块是否已经完成加载。
        console.log(module.children) //返回一个数组,表示该模块要用到的其他模块。
        console.log(module.exports) //表示模块对外输出的值。
    }
    
    
    module.exports ={
        sayfunc:say,
    }

    main.js

    var util = require("./util");
    util.sayfunc();

    前者一个模块只输出一个function,后者输出一个对象,里面可以扩展多个方法、属性等

    比如:

    function say(){
        console.log('hello world');
        console.log(module.id) //模块的识别符,通常是带有绝对路径的模块文件名。
        console.log(module.loaded) //返回一个布尔值,表示模块是否已经完成加载。
        console.log(module.children) //返回一个数组,表示该模块要用到的其他模块。
        console.log(module.exports) //表示模块对外输出的值。
    }
    
    function test(){
        console.log('test');
    }
    
    
    module.exports ={
        sayfunc:say,
        testfunc:test
    }

    也可以使用exports:

    exports.sayfunc = function say(){
        console.log('hello world');
        console.log(module.id) //模块的识别符,通常是带有绝对路径的模块文件名。
        console.log(module.loaded) //返回一个布尔值,表示模块是否已经完成加载。
        console.log(module.children) //返回一个数组,表示该模块要用到的其他模块。
        console.log(module.exports) //表示模块对外输出的值。
    }
    
    exports.testfunc = function test(){
        console.log('test');
    }
    • module.export与exports区别

    // dep.js
    exports.A = function() {}
    // app.js
    var dep = require('dep');
    dep.A()
    

      这其中exports.A = function() {}也可以写成module.exports.A = function() {}



      
    // dep.js
    module.exports = function () {}
    // app.js
    var dep = require('dep');
    dep();
    

     注意这里只能用module.exports

       如果写成 

      exports = function () {}

        会让exports跟module.exports的隐式赋值断开,相当于给exports重新赋值

        而最终导出的是module.exports

        而且之后再怎么向exports上挂变量 (如exports.A = 1) 都不会被导出了

        

  • 相关阅读:
    第二期冲刺会议3
    第二期站立会议2
    意见汇总及改进方案
    第二期站立会议1
    第一期站立会议7
    第一期站立会议6
    第一期站立会议5
    第一期站立会议4
    第一期站立会议3
    第一期站立会议2
  • 原文地址:https://www.cnblogs.com/cowboybusy/p/10606279.html
Copyright © 2011-2022 走看看