发现:js没有模块化的思想(一个html文件引入多个js文件,先后顺序的问题。。。)
commonJS 就是解决模块化的规范,一个规范
NodeJS就是CommonJS这个规范的实现者。
CommonJS 规范还规定,每个模块内部有两个变量可以使用,require 和 module。
- require 用来加载某个模块
require一个文件是会执行
并导入该文件导出的内容 - module 代表当前模块,是一个对象,保存了当前模块的信息。
- exports 是 module 上的一个属性,保存了当前模块要导出的接口或者变量,使用 require 加载的某个模块获取到的值就是那个模块使用 exports 导出的值
- 每个js文件默认就是一个模块,每个模块最上一行默认为
var exports = module.exports
- Node 模块是通过 module.exports 导出
注意
let a = require('./test_1118')
console.log(a.name) //lili
a.name = '000'
let b = require('./test_1118')
console.log(b.name) //000
// 第一次加载某个模块时,Node.js 会缓存该模块。以后再加载该模块,就直接从缓存取出该模块的 module.exports 属性返回了。
// 所以相当于第一次导入某模块A得到的对象,之后再导入同一模块A,对象是同一个
let a = require('./test_1118')
console.log(a.name) //lili
a.changeName('898989')
let b = require('./test_1118')
console.log(b.name) //lili
// require 的是被导出的值的拷贝,也就是说,一旦导出一个值,模块内部的变化就影响不到这个值 。