模块化的由来
- 在团队协作中,经常会不同队员负责不同的文件编写(比如js),那么如果不同js文件定义了相同的变量,那么如果这些文件都引入在页面中,那么会出问题。-导致了全局变量的污染。
- 期望不同的文件之间互不干扰,同时也不会污染到全局变量。—模块化
什么是模块化
- 文件作用域(模块是独立的,在不同的文件使用必须要重新引用)【在node中没有全局作用域,它是文件模块作用域】
- 通俗来讲就是将每一个js文件作为一个单独的模块,如果需要使用另一个js文件,需要使用专门的语法,模块内的内容和变量对于其他模块都是不可见的。
- 通信规则
- 加载require
- 导出exports
common.js
概念:是一个如何实现模块化的规范。规定实现JavaScript模块化应该是什么样子。nodejs根据commonjs实现了一套模块化的语法
commonjs
和nodejs
的关系commonjs
是模块化的规范,模板。nodejs
是commonjs
的实现。
common.js模块化内容
require
:引入,模块的语法。如果需要在一个模块中引入另一个模块,需要使用require
语法const 变量名 = require("模块的路径");
require
引入一个模块是指引入模块所暴露出来的内容。并不是模块的全部。
module
:这是每个模块都有的一个变量,指的是模块本身。module.exports
:一个模块暴露的内容,是一个对象。require
语法引入的就这个属性的内容
如果一个模块引入的内容比较多,也可以使用解构赋值来优化
module.exports
与exports
exports
是module.exports
的引用注意:给
module.exports
赋值会切断与exports
之间的联系直接添加属性两者皆可。
赋值操作时,只能使用
module.exports
console.log( module.exports === exports ) // ==> true
// 等价操作
module.exports.num = 123
exports.num = 123
// 赋值操作:不要使用 exports = {}
module.exports = {}
模块路径
相对路径:以该模块的本身所在目录为出发点
require('./子目录名/')require('./../')
./
指的是的当前模块所在文件夹
绝对路径
require('/目录名/模块名');
/
指的是当前盘符为起点(C盘、d盘等)
nodejs
本身的模块:require('模块名');
- 直接写模块名,不需要写路径