模块化的定义
讲一个复杂的程序文件按照一定的规则拆分成多个独立的小文件,这些小文件就是小模块,这就是模块化。
每个小模块内部的数据是私有的,可以暴露内部数据给外部其他模块使用。
模块化优点
- 减少命名的冲突
- 提高复用性
- 提高可维护性
- 按需加载
模块化使用
1.单个模块暴露
// index.js
const userObj = require("./user.js");
// 调用收到的函数 user()
userObj();
// user.js
function user(){
console.log("这是用户信息。");
}
// 对外暴露 user 数据
module.exports = user;
2.多个模块暴露
// index.js
const userObj = require("./user.js");
// 分别使用对外暴露的函数
userObj.user();
userObj.userInfo();
// user.js
function user(){
console.log("这是用户。");
}
function userInfo(){
console.log("这是用户信息。");
}
// 方式一:对外暴露 user 和 userInfo 数据对象
module.exports = {
user,
userInfo
};
// 方式二:单独暴露 user 和 userInfo 数据
exports.user = user;
exports.userInfo= userInfo;
暴露数据时,不能使用 exports = user 形式暴露,返回的是一个空对象。
exports 和 module.exports 的关系:exports = module.exports = { }
因为 require() 加载其他模块的时候,返回结果的目标模块中 module.exports 的值。
导入模块注意点
- 导入自己创建的模块时,使用相对路径,并且不能省略 ./ 和 …/
// 正确
const userObj = require("./user.js");
// 错误
const userObj = require("user.js");
- 导入的模块文件如果是 .js 或 .json 可以省略后缀
const userObj = require("./user");
如果导入的模块是其他类型的,默认以 js 模块文件处理(.txt .doc)。
- 导入文件夹
const userObj = require("./module");
如果导入的是文件夹,那么先去找该文件夹下 package.json 文件中的 main 属性对应的路径文件,如果有此文件,就导入该文件,否则找不到此文件就会报错。
// ./module/package.json
// 找到后导入
{
"main": "./main.js"
}
// 没有此文件报错
{
"main": "./main2.js"
}
如果 main 属性找不到,或者 package.json 也找不到,就去该文件夹下找到 index.js 和 index.json 文件,如果找到了这两个文件就会导入,否则也报错。文章来源:https://www.toymoban.com/news/detail-632746.html
// ./module/index.js
module.exports = "暴露出去的信息"
也就是 package.json 文件中的 main 属性对应的路径文件 main.js 和 module 文件夹下 index.js 文件其中一个存在即可。文章来源地址https://www.toymoban.com/news/detail-632746.html
导入模块的基本流程
- 将相对路径转为觉得路径,path.resolve(),定位目标文件;
- 缓存检测,若读取过文件,从缓存中再次读取,否则重新读取;
- 读取目标文件代码,readFile();
- 包裹一个函数并自执行,通过arguments.callee.toString()查看自执行函数;
- 缓存模块的值,将读取过得文件进行缓存;
- 返回 module.exports 的值。
到了这里,关于Node.js-模块化理解及基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!