个人网站做论坛还是博客好,微信开发者平台取消授权,网络创始人 网站建设,合肥小程序搭建1. Node.js中的模块化
Node.js中根据模块来源不同#xff0c;将模块分为了3大类#xff0c;分别是#xff1a;
内置模块#xff1a;内置模块由Node.js官方提供的#xff0c;例如fs、path、http等自定义模块#xff1a;用户创建的每个.js文件#xff0c;都是自定义模块…1. Node.js中的模块化
Node.js中根据模块来源不同将模块分为了3大类分别是
内置模块内置模块由Node.js官方提供的例如fs、path、http等自定义模块用户创建的每个.js文件都是自定义模块第三方模块由第三方开发出来的模块并非官方提供的内置模块也不是用户创建的自定义模块使用前需要先下载
2. 加载模块
使用强大的require()方法可以加载需要的内置模块、用户自定义模块、第三方模块进行使用。例如
//1. 加载内置的fs模块
const fs require(fs)
//2. 加载用户的自定义模块
const custom require(./custom.js)
//3. 加载第三方模块
const moment require(moment)3. 什么是模块作用域
和函数作用域类似在自定义模块中定义的变量、方法等成员只能在当前模块内被访问这种模块级别的访问限制叫做模块作用域
好处防止全局变量污染问题默认情况下无法访问导入模块的变量和函数
3.1 向外共享模块作用域中的成员
1. module对象
在每一个.js自定义模块中都有一个module对象它里面存储了和当前模块有关的信息打印如下
console.log(module)//日志
Module {id: .,path: /Users/xxx/WebstormProjects/learnJS/5.nodeJS,exports: {},filename: /Users/xxx/WebstormProjects/learnJS/5.nodeJS/3.module对象.js,loaded: false,children: [],paths: [/Users/xxx/WebstormProjects/learnJS/5.nodeJS/node_modules,/Users/xxx/WebstormProjects/learnJS/node_modules,/Users/xxx/WebstormProjects/node_modules,/Users/xxx/node_modules,/Users/node_modules,/node_modules]
}2. module.exports对象
在自定义模块中可以使用module.exports对象将模块内的成员共享出去供外界使用。
外界用require()方法导入自定义模块时得到的就是module.exports所指向的对象。
自定义模块.js
//在一个自定义模块中默认情况下module.exports {}//方式一
//向module.exports对象上挂载username属性
module.exports.username zs
//向module.exports对象上挂载sayHello方法
module.exports.sayHello function () {console.log(Hello)
}//方式二
module.exports {username: zs,sayHello: function () {console.log(Hello)}
}test.js
//在外界使用require导入一个自定义模块的时候得到的成员
//就是那个模块中通过module.exports指向的那个对象
const m require(./自定义模块)
console.log(m)打印
{ username: zs, sayHello: [Function: sayHello] }3. 共享成员时的注意点
使用require()方法导入模块时导入的结果永远以module.exports指向的对象为准。 4. exports对象
由于module.exports单词写起来比较复杂为了简化向外共享成员的代码Node提供了exports对象。默认情况下exports和module.exports指向同一个对象。最终共享的结果是还是以module.exports所指的对象为准。
console.log(exports)
console.log(module.exports)
console.log(exports module.exports){}
{}
true挂载属性
exports.username zs
exports.sayHello function (){console.log(hello)
}5. exports和module.exports的使用误区
时刻谨记require()模块时得到的永远是module.exports指向的对象
//案例一
exports.username zs
module.exports {gender: 男,age:22
}//{gender: 男, age: 22}//案例二
module.exports.username zs
exports {gender: 男,age:22
}//{username: zs}//案例三
exports.username zs
module.exoprts.gender 男//{username: zs, gender: 男}//案例四
exports {username: zs,gender: 男
}
module.exports exports
module.exports.age 22//{username: zs, gender: 男, age: 22}4. Node.js中的模块化规范
Node.js遵循了CommonJS模块化规范CommonJS规定了模块的特性和各模块之间如何相互依赖。
CommonJS规定 1每个模块内部module变量代表当前模块。 2module变量是一个对象它的exports属性即module.exports是对外的接口。 3加载某个模块其实是加载该模块的module.exports属性。require()方法用于加载模块。