web前端-初探Node模块化
node模块化及使用模块的方法步骤
我们知道,在我们做项目的时候,如果程序设计的规模达到了一定复杂程度,则必须对其进行模块化以管理各个包或者文件。模块化可以有多种形式,但至少应该提供能够将代码分割为多个源文件的机制,所以node在这方面进行了一些封装并提供了向外暴露模块和引入模块的方法。
1.模块分类
核心模块:由node引擎提供好的模块,模块标识就是模块名
文件模块:用户自己创建的模块,模块标识是文件的路径
2.模块化原理
在Node中,一个js文件就是一个模块,每个js文件中的变量和函数都不是全局作用域,在其他模块中无法访问
而实际上当node在执行模块中的代码时,它会将所有代码包装在一个外层函数中,故模块中的变量和函数默认状态都不是全局变量
故实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时同时传递进了5个参数
function (exports, require, module, __filename, __dirname) {
//用户的代码
}
exports:该对象用来将变量或函数暴露到外部
require:函数,用来引入外部的模块
module:代表当前对象本身,exports就是module的属性,故也可以使用module.exports导出变量或方法
__filename:表示当前模块的完整路径
3.Node引入模块:require(模块标识)
引入核心模块如:var math = require("math");
引入文件模块如:require(绝对路径/相对路径)
路径如果是相对路径,必须以.或..开头,如require("./test.js"),也可以直接require("./test")
使用require( )引入模块后,该函数会返回一个对象,这个对象代表的就是引入的模块
4.向模块外部暴露属性或方法
通过exports来向外部暴露变量和方法
将要暴露的变量和方法设置为exports的属性即可
下图是通过exports对象向外暴露变量和方法的例子:
//node2.js中的代码,暴露变量x和方法add(a,b)
exports.x="我是2中的x";
exports.add=function (a,b) {
var result=a+b;
console.log(result)
}
//node1.js中的代码
var obj=require("./node2.js");
console.log(obj.x)
obj.add(2,3)
5.exports和module.exports的区别:
exports只能可以通过.的形式来向外暴露内部变量:exports.xxx=xxx
module.exports既可以通过.的形式,也可以直接以对象赋值:module.exports.xxx=xxx 或 module.exports={ }
module.exports={ x:"我是node2中的x", add: function (a,b) { var result=a+b; console.log(result) } };
6.Node中的全局变量
node中有一个全局变量global,它的作用和网页中window类似
在全局中创建的变量都会作为global的属性保存,如:a=10(不加var)
在全局中创建的函数都会作为global的方法保存
7.总结
node模块化弥补了当前JavaScript没有模块化标准的缺陷,它让JS能够引入后可以在任何地方运行,同时模块的定义十分简单,接口也十分简洁。每个模块具有独立的空间,它们互不干扰,在引用使用时也显得干净利落。
第一次写博客,不足之处希望大家批评指正,天道酬勤,加油!
- 点赞
- 收藏
- 关注作者
评论(0)