1. node的模块化
2. 模块的分类
- 内置模块(核心模块) 由node官方提供。常见的有:fs,path,http等
- 自定义模块 用户创建的每一个js文件都是一个自定义模块。
- 第三方模块 由第三方开发,使用之前需要下载安装。
3.模块作用域
和函数作用域类似,在自定义模块中的变量,函数等成员,只能在当前模块中使用,这种模块级别的访问限制,就叫做模块作用域。
好处:防止全局变量污染。
模块的导入和导出
导出
新建一个a.js文件,里面的代码如下:
```js
//导出一个对象,对象中的值就被暴露出去了。
module.exports = {
name:"刘德华",
act(){
console.log("之前我没得选,现在我想做一个好人")
},
age:35
}
导入
新建一个b.js文件,里面的代码如下:
```js
const ldh = require("./a.js")
console.log(ldh.age)
console.log(ldh.name)
ldh.act();
//或者使用解构赋值
const {name} = require("./a.js") //只接受name的值
console.log(name)
【注意】 【module.exports = { name:‘刘德华’}】 和 【module.exports.name = '刘德华'】的区别
前者是创建的新的对象,将原对象覆盖。后者是在原对象上添加一个新的属性。
require()方法的返回值其实就是引入模块的module.exports对象。
【注意】
1. 导入自定义模块时,文件名的js后缀可以不写
2. require方法加载其他模块时,会执行被加载模块中的代码。
exports导出
由于module.exports写起来比较繁琐,node官方为我们提供了exports关键字,它和module.exports指向同一个对象。
exports.name = "刘德华";
exports.age = 35;
exports.act = function () { console.log("以前我没得选,现在我想做一个好人"); };
两个导出的区别
exports和module.exports其实指向的是同一个对象
console.log(module.exports == exports);// true
记住一句话:module.exports指向谁,谁就是被导出的对象。
导出一个对象用 module.exports,导出多个变量和方法用 exports。
使用场景分析
1.module.exports指向一个新对象, exports添加一个新属性。
module.exports = {
name:"刘德华",
age:30
}
exports.myName = "黄渤";
导出的结果为 :{ name:"刘德华", age:30}
2.exports 指向一个新对象,module.exports 添加一个新属性
exports = {
name:"刘德华",
age:30
}
module.exports.myName = "黄渤";
```
导出的结果为 :{ myName:"黄渤"}
3.module.exports 添加一个新属性, exports添加一个新属性。
module.exports.myName = "黄渤";
exports.name = "刘德华";
exports.age = 30;
导出的结果为:{ myName: '黄渤', name: '刘德华', age: 30 }