nodejs笔记--模块篇,三

文件模块访问方式通过require('/文件名.后缀') require('./文件名.后缀') requrie('../文件名.后缀') 去访问,文件后缀可以省略;以"/"开头是以绝对路径去加载,以"./"开头和以"../"开头表示以相对路径加载,而以"./"开头表示同级目录下文件,

文件后缀可以省略,Nodejs尝试加载的优先级 js文件 > json文件 > node文件

exports和module.exports;提供了外部访问的接口

通过文件名缓存是指实际文件名,并不会因为传入的路径形式不一样而认会是不同的文件

1.最好别分别定义module.exports和exports

2.NodeJs开发者建议导出对象用module.exports,导出多个方法和变量用exports

module.exports和exports区别:

API提供了解释

http://nodejs.org/api/modules.html

Note that exports is a reference to module.exports making it suitable for augmentation only. If you are exporting a single item such as a constructor you will want to use module.exports directly instead

exports仅仅是module.exports的一个地址引用。nodejs只会导出module.exports的指向,如果exports指向变了,那就仅仅是exports不在指向module.exports,于是不会再被导出

参考其它理解:

http://www.hacksparrow.com/node-js-exports-vs-module-exports.html

http://zihua.li/2012/03/use-module-exports-or-exports-in-node/

module.exports才是真正的接口,exports只不过是它的一个辅助工具。 最终返回给调用的是module.exports而不是exports。

所有的exports收集到的属性和方法,都赋值给了Module.exports。当然,这有个前提,就是module.exports本身不具备任何属性和方法。

其它模块

  module.id
  返回string类型的模块标识,一般为完全解析后的文件名


  module.filename
  返回一个string类型的完全解析后文件名


  module.loaded
  返回一个bool类型,表示是否加载完成


  module.parent
  返回引用该模块的模块


  module.children
  返回该模块引用的所有模块对象的数组