一、自定义模块介绍
程序员自己写的 Node.js 模块。
• Node.js 中每个单独的 .js 文件,就是一个模块
• 每个模块中都有一个 module 变量,其代表当前模块
• module 的 exports 属性是对外的接口
• 只有导出(module.exports)的属性或方法才能被外部调用
• 未导出的内容是模块私有,不能被外部访问
• 使用时,通过 require 引入
二、示例
通过如上图,我们看到我们写好的模块,导入后发现调用报错,报错原因说不能查找到模块circle原因:我们这样书写导入语句,代表的是导入的官方文档中的核心模块,而核心模块中没有该模块,所以会报错。
解决方法:将我们自定义的模块的路径写好,就可以解决该问题,那么文件的后缀名.js可以省略不写,但是路径一定要写对。
那么我们解决了刚刚的找不到模块的报错问题,接着又出现了一个问题,说circle模块中的perimeter方法不是一个函数,这个问题说明我们的这个方法没有进行导出,没有导出的话外界是访问不到的,无法调用模块里面的方法和属性,是私有的。
所以,解决方法: 将我们需要外界使用的方法进行导出,然后外界就可以调用该方法。
我们将方法导出,然后进行打印我们可以发现,我们的exports导出的对象当中多了2个我们导出的方法,说明我们导出成功啦!
然后我们就可以使用app.js测试文件进行调用执行啦
通过如上图,我们调用成功,没有报任何错误,说明我们成功啦。
circle.js文件代码
//circle模块 //当前模块的指代变量, module 表示当前模块 //console.log(module) //定义一个圆周率常量 const PI = 3.14 //计算圆的周长 const perimeter = (r) => { return 2 * PI * r } //计算圆的面积 function area (r) { //2次幂可以通过 r*r表示,也可以通过math对象的pow方法 return PI * Math.pow(r,2) } //导出 module.exports = { perimeter, area }
app.js文件代码
//导入模块 const circle = require('./circle') //定义一个r半径常量,用于传输 const r = 10 console.log('周长',circle.perimeter(r)); console.log('面积',circle.area(r));