bekacodechn
5/14/2019 - 7:41 PM

node.md

module.exports 和 exports关系

module.exports === exports //true

那为什么 module.exports = {}可以,而exorts = {}require()是就不行呢?

  1. node 中 默认 var exports = module.exports
  2. 默认在末行有 return module.exports

exports仅仅是module.exports的一个引用,如果给exports单独赋其他的值,那么他们之间的 关系就会断掉,末行return module.exportsexports没有了关系,所以不能单独给exports 赋值。

require加载同一文件,只会执行一次(从缓存中取)

现有a.js,
b.js ,
c.js
a.js中引用b.jsc.js,在b.js中引用c.js,那么

  • c.js 中的内容只会执行一次,而a.js中可以获取c.js的引用结果

node中require('xxx')是怎么查找文件的?

'xxx'文件名的话可能是核心模块或者是第三方模块,如果是'./xxx'形式,则是自己写的模块.

  1. 看是不是核心目录,是的话加载
  2. 不是核心目录,到 node_modules中查找,如果找到再去package.json中查找main属性的值, 根据这个值去加载文件。
  3. 如果package.json或者main属性不存在或错误,就默认加载index.js 4.如果index.js不存在,就到上一级的node_models查找,这样一直查找到 根目录下的node_models,如果还没找到,就报错。
  4. './xxxx'形式就按相对路径查找。注:自己写的必须袋路径。