当前位置:   article > 正文

commonjs

commonjs

目录

概述

commonjs特点:

CommonJS规范

nodejs对CommonJS的实现

commonjs 实现:

  模块的导出

  模块的导入


概述

      每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。在服务器端,模块的加载是运行时同步加载的。在浏览器端,模块需要提前编译打包处理。有了这一需求,且彼时nodejs刚刚发布,前端没有官方的模块化标准,因此大家选择了社区提供的CommonJS作为模块化标准。在这里有两个非常重要的概念:模块的导出模块的导入

commonjs特点:

   1.所有的代码都运行在模块作用域, 不会污染全局作用域。

   2.模块可以多次加载,但是只会在第一次加载是运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。

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

   4..在 commonjs 中每一个 js 文件都是一个单独的模块,我们可以称之为 module;

   5.该模块中,包含 CommonJS 规范的核心变量: exports、module.exports、require;

    6.exports 和 module.exports 可以负责对模块中的内容进行导出;

   7.require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中的内容;

CommonJS规范


      CommonJS导出模块的方法是exports,导入模块的是require,具体规范如下

1)如果一个JS文件中存在exports或require,该JS文件是一个模块

2)模块内的所有代码均为隐藏代码,包括全局变量、全局函数,这些全局的内容均不应该对全局变量造成任何污染

3)如果一个模块需要暴露一些API提供给外部使用,需要通过exports导出,exports是一个空的对象,你可以为该对象添加任何需要导出的内容

4)如果一个模块需要导入其他模块,通过require实现,require是一个函数,传入模块的路径即可返回该模块导出的整个内容

【注】CommonJS只是一个规范,相当于告诉你按什么标准制造汽车,但是具体怎么制造还是得看生产商。因此,有了规范以后,nodejs就去实现模块化了

nodejs对CommonJS的实现


   为了实现CommonJS规范,nodejs对模块做出了以下处理

1)为了保证高效的执行,仅加载必要的模块。nedejs只有执行到require函数时才会加载并执行模块

2)为了隐藏模块中的代码,nodejs执行模块函数时,会将模块中的所有代码放置到一个函数块中执行,以保证不污染全局变量

3)为了保证顺利的导出模块的内容,nodejs做了以下处理

          在模块开始执行前,初始化一个module.exports = {};
          module.exports即模块的导出值
          为了方便开发者便捷的导出,nodejs在初始化完module.exports后,又声明了一个变量                     exports=module.exports 
4)为了避免反复加载同一个模块,modejs默认开启了模块缓存,如果加载的模块已经被加载过了,则会自动使用之前的导出结果

commonjs 实现:

每个模块文件上存在 moduleexportsrequire三个变量

  • module 记录当前模块信息。
  • require 引入模块的方法。
  • exports 当前模块导出的属性

  模块的导出

  1. const money = 9.9
  2. const goodsName = 'ipone'
  3. const info = '是兄弟就来砍一刀,9.9包邮iphone'
  4. function foot(book) {
  5. console.log("读" + book);
  6. }
  7. //导出
  8. module.exports = {
  9. money,
  10. goodsName,
  11. info,
  12. foot
  13. }

  模块的导入

  1. console.log('需要引入别的模块')
  2. //引入 indx2 模块
  3. const order = require("./indx2");
  4. console.log(order);
  5. // 输出:{
  6. // money: 9.9,
  7. // goodsName: 'ipone',
  8. // info: '是兄弟就来砍一刀,9.9包邮iphone',
  9. // foot: [Function: foot]
  10. // }
  11. console.log(order.money) //9.9
  12. console.log(order.goodsName) //ipone
  13. console.log(order.info) //是兄弟就来砍一刀,9.9包邮iphone
  14. //往foot里传参
  15. order.foot('书') //读书

   在终端中 输入     node 文件名     (注意路径)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/295409
推荐阅读
相关标签
  

闽ICP备14008679号