Appearance
模块介绍
module.exports只能导出一个吗
不是的,module.exports可以导出多个对象或函数,只需要将它们放在一个对象中即可。例如:
javascript
module.exports = {
obj1: {...},
obj2: {...},
func1: function() {...},
func2: function() {...}
}
在其他文件中,可以通过require来引用这些导出的对象或函数:
javascript
const { obj1, func1 } = require('./module');
模块化
即将复杂问题拆分为小问题的思想。在程序中,指把一个大的、复杂的功能,拆分为一个个不可再拆分的小的功能。
尽管如此,实际操作中小的功能也可能再拆分。实际上更基本的思想是,将功能尽量的可复用起来,不要在使用的过程中牵连太多其他的功能
根据模块的来源可分为:内置模块、自定义模块、第三方模块(需先下载才能使用)
javascript
const fs = require('fs') // 加载第三方模块也是如此,直接写入名称
const custom = require('./custom.js'); // 省略扩展名也可以
将代码内容以模组形式输出
javascript
// 模组文件,假设名称为modal01.js
const username = "koko";
module.exports.username = username;
module.exports.helloKoko=function(){
console.log(this.username);
}
// 引入模组的文件, 假设与modal01.js同一个文件夹
const mo = require('./modal01')
console.log(mo.username);
mo.helloKoko();
module.exports写起来太长,可以使用exports替代,但是如果文件里指向对象的,既有module.exports也有exports,最终还是要以module.exports所指向的对象为准
内置模块的加载优先级最高
自定义模块会以提供的名称进行加载,如果未找到,会依次尝试补全.js/.json/.node从而进行查找,如果都未找到则终端报错
require加载文件的机制
1、在被加载的目录下查找名为package.json的文件,寻找main属性作为入口
2、没有package.json或找不到main属性,则尝试加载目录下的index.js文件
3、都失败会报错,提示信息为:Error: Cannot find module 'xxx'。其中,xxx是想要加载的模块