commonjs

什么是模块化?

  模块化就是将独立的功能代码封装成一个独立的文件,其他模块需要使用,再进行引用。

模块化的作用?

  模块化有利于代码的拆分和架构上的解耦。模块化再服务端邻域早已成熟,nodejs也已经支持模块化。

 

一.commonjs

  模块加载机制被称为commonjs规范

  伴随则 nodejs 而诞生的 commonjs 规范。commonjs 规范应用于nodejs应用中,在 nodejs 应用中每个文件就是一个模块,拥有自己的作用域,文件中的变量,函数都是私有的,与其他文件相隔。

  commonjs 规范规定,每个模块内部,module 变量代表当前模块。这个变量是一个对象,它的 exports 属性(即 module.exports )是对外的接口。加载某个模块,其实是加载该模块的 module.exports 属性。

  commonjs

 

 

   module 中有这些属性

  module.id :模块的识别符,通常是带有绝对路径的模块文件名。

  module.filename:模块的文件名,带有绝对路径。

  module.loaded:返回一个布尔值,表示模块是否已经完成加载。

  module.parent:返回一个module 对象,表示调用该模块的模块,如果该模块没有被引用,那么 parent 属性就为 null 。

  module.children:返回一个 module 数组,表示该模块要用到的其他的模块。

  module.exports:表示模块对外输出的值

  module.path:这个用于 require 查找该文件的位置。

 

二.require

  既然有 module.exports 导出,就有与之对应的 require 导入,如下:

  根据参数的不同格式,require 命令去不同的路径寻找模块文件。

  1. 如果参数字符串以  "/ " 开头,则表示加载的是一个绝对路径的模块文件。例如: require("/home/marco/foo.js") 将加载 /home/marco/foo.js 。
  2. 如果参数字符串以  "./"  开头,则表示加载的是一个位于相对路径(跟当前文件的位置相比)的模块文件。例如:require("./circle") 将加载当前脚本同一目录的 circle.js 脚本

 

三.module.exports 和 exports 

  我们还可以导出 exports 直接使用,但需要注意一点,exports 是已经定义的常量,在导出的时候不能再给它定义

  exports = module.exports

  当需要注意一点,在导出对象前不能修改 exports 的指向,若修改 exports 就与 module.exports 不是一个东西了,当然你可以在导出后随意修改,这时候就不影响导出。

  单独使用 exports 和 module.exports 其实没啥区别,个人建议还是使用 module.exports ,毕竟这才是常规稳妥的写法。

  

上一篇:module.exports与exports,export与export default之间的关系和区别


下一篇:Delphi 系统[28]关键字和保留字 index、near、far、export、exports、external、name、resident