Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块
10. Node中的模块化
10.1 什么是模块化
- js设计之初只是为了实现表单验证这样的简单功能,没设计模块化方案,所以js天生不支持模块化
- 不支持模块化简单来说就是在一个js文件内不能引入其他js文件,当然也就谈不上使用其他js文件中的内容
- 为了让js支持模块化,一些大神自己编写底层库文件,让js开始支持模块化
- js模块化规范有四种标准: AMD CMD CommonJS ES6
- Node属于CommonJS标准
- 使用模块化可以很好的解决变量、函数名冲突问题,也能灵活的解决文件依赖问题
- 没有模块化,不允许一个js文件引入另外的JS,有了模块化,就允许一个js文件引入其他的js文件
10.2 通过global基本实现模块化
局部作用域(模块的作用域):
- 一个js文件就是一个模块
- 在一个js文件中定义的属性(变量、常量)和方法默认都只能在当前js文件中使用
全局作用域:
- 在js文件中声明的属性和方法如果都挂载到global对象下;当其他js文件导入该模块后,就能使用该模块下的属性和方法了。
aa.js
// 加载bb.js require('./bb.js'); // 加载自己写的js文件, 必须加 ./ // console.log(global.abc); console.log(abc); fn(4, 9);
bb.js
// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => { console.log(x + y); }; // let console = '123'; // 把变量定义成global的属性 global.abc = abc; global.fn = fn;
这个方案可以实现模块化,但是不推荐,因为有可能会污染全局环境。
实例-模块化引入-成对出现
1、文件目录
2、示例
第一组
a.js
// 引入b.js,并且还要使用b.js中定义的变量、函数等 const b = require('./b.js'); console.log(b); // 得到一个空对象 / * 小结: * 虽然可以通过require加载其他的js文件,但是并不能使用其他js文件中定义的变量 */
b.js
// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => {
console.log(x + y); };
效果1-a引入b
第二组
aa.js
// 加载bb.js require('./bb.js'); // console.log(global.abc); // hello console.log(abc); // hello fn(4, 9); // 13
bb.js
// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => {
console.log(x + y); }; // let console = '123'; // 把变量定义成global的属性 global.abc = abc; global.fn = fn;
效果2-aa引入bb
10.3 module.exports导出属性和方法
- 将变量、对象、函数等挂载到global对象上并不推荐,因为容易造成变量污染。
- 推荐使用 module.exports 导出模块中定义好的变量、对象、方法等等
- 使用require加载(导入)模块后,就能使用模块中定义好的变量、对象、方法了
bbb.js – 导出模块
// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => {
console.log(x + y); }; // 导出模块 // module.exports = 导出的内容(可以是对象、可以是函数) module.exports = {
// 属性: 值 abc: abc, fn: fn }
aaa.js – 导入模块
// 导入模块 const bbb = require('./bbb.js'); // console.log(bbb); console.log(bbb.abc); // hello bbb.fn(3, 8); // 11
实例
第三组
aaa.js
// 导入模块 const bbb = require('./bbb.js'); // console.log(bbb); console.log(bbb.abc); // hello bbb.fn(3, 8); // 11
bbb.js
// 定义几个变量和函数 let abc = 'hello'; let fn = (x, y) => {
console.log(x + y); }; // 导出模块 // module.exports = 导出的内容(可以是对象、可以是函数) module.exports = {
// 属性: 值 abc: abc, fn: fn } // 等价于 module.exports = {
// 属性: 值 es6中相同可省略 abc,fn }
效果3-aaa引入bbb
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-nodejs/10840.html