模块化思想之commonJS

2018-09-19  本文已影响0人  Mr无愧于心

commonJS思想介绍

  1. CommonJS规定,每一个JS都是一个单独的模块(模块是私有的:里面涉及的值和变量以及函数等都是私有的,和其它JS文件中的内容是不冲突的)
  2. CommonJS中可以允许模块中的方法互相的调用。
     B模块中想要调取A模块中的方法
       =>A导出
       =>B导入

导入导出

[导出]

// exports.fn = fn;//=>把当前模块私有的函数放到EXPORTS导出对象中
(赋值给他的某一个属性),
这样在其它模块中,可以基于REQUIRE导入进来使用  <=> module.exports.fn=fn;

// exports={};//=>是无法导出内容的:默认和module.exports是同一个堆内存,
但是这种操作让exports指向新的堆内存,
而module.exports不受影响(require导入的是module.exports对应的堆内存,而不是exports的)

[导入]

  require导入规则
     require('./xxx') 或者 ../xxx 再或者 /xxx,
     这种自己制定路径的模式,都是为了导入自定义的模块,
     换句话说,想要导入自定义的模块,必须加路径

     require('xxx') 首先到当前项目的node_modules中查找是否存在这个模块,
     不存在找node提供的内置模块(导入第三方或者内置的)

CommonJS特点(私有,缓存运行结果,按序加载,同步加载)

  1. 所有代码都运行在模块作用域,不会污染全局作用域(每一个模块都是私有的,包括里面所有的东西也都是私有的,不会和其它模块产生干扰)

  2. 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。(为了保证性能,减少模块代码重复执行的次数)

  3. 模块加载的顺序,按照其在代码中出现的顺序。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。

node中的commonJS

node 天生自带模块化:如果是一个js文件,那么会在当前js文件代码的最外层套一个自执行函数

(function (exports,module,require,__dirname,__filename) {//
     console.log(this);
    // exports : 导出(对象)
    // module : 模块(对象)
    // require : 导入(函数)
    // __dirname(当前文件父级文件的绝对路径)
    // __filename(当前文件的绝对路径)
    return  module.exports;
   /* let fs = require("fs");
    console.log(fs);*/
})();
上一篇 下一篇

猜你喜欢

热点阅读